Scope of decorator argument
Hi, this: class base(object): @adecorator(xy) def edit(self): print edit class child(base): xy = 3 obviously fails because xy is not bound at class creation time of the base object. One solution could be delegation: class base(object): @classmethod def edit(self): print do the real work here class child(object): xy = 3 mybase = base @adecorator(xy) def edit(self, *args, **kwargs): self.mybase.edit(*args, **kwargs) But then I have the ugly boiler plate delegation code in child. Is there any other solution, probably with metaclasses ? -- Servus, Gregor -- http://mail.python.org/mailman/listinfo/python-list
Re: Scope of decorator argument
Gregor Horvath schrieb: Is there any other solution, probably with metaclasses ? I've found this one: class mymeta(type): def __new__(meta, class_name, bases, new_attrs): new_attrs[edit] = adecorator(new_attrs['xy'])(bases[0].edit)) return type.__new__(meta, class_name, bases, new_attrs) class base(object): def edit(self): print %s edit % self class child(base): __metaclass__ = mymeta xy = 3 Don't know if it's the best solution but it seems to work. -- Servus, Gregor -- http://mail.python.org/mailman/listinfo/python-list