There is no need to 'compute' the class, because the class is stored in the decorator, wenn the command is created. I post my code from the other thread here again.
> When Leo sees a command, it looks up the wrapper in the dict and simply > calls the wrapper with an event arg. The *wrapper *must compute "self" > if and only if the wrapper represents a wrapper of a method. Yes, this is > complicated. The following is my best illustration of the problem that > can't be solved. > > The code just knows the class. It is as easy as it can get: commands_dict = {} # Use as function/method decorator def cmd(*command_names): class Decorator: def __init__(self, func): self.func = func try: # Python3 self.isMethod = '.' in func.__qualname__ except AttributeError: # Python2 self.isMethod = 'instance' in str(func) for command_name in command_names: commands_dict[command_name] = self.__call__ def __call__(self, *args, **kwargs): if self.isMethod: return self.func(args[0], *args, **kwargs) else: return self.func(*args, **kwargs) return Decorator @cmd('command-one', 'first-command') def pureFunction(event=None): """pureFunction docstring""" print("-- function:", event) class MyClass: @cmd('command-two', 'second-command', 'another-second-command') def instanceMethod(self, event=None): """instanceMethod docstring""" print("** method:", event) def tests(): """Calling functions/methods from the command_dict""" for command in commands_dict: commands_dict[command]("I'm command <%s>." % command) tests() Reinhard -- You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to leo-editor+unsubscr...@googlegroups.com. To post to this group, send email to leo-editor@googlegroups.com. Visit this group at http://groups.google.com/group/leo-editor. For more options, visit https://groups.google.com/d/optout.