automatic delegation
Peter Otten
__peter__ at web.de
Tue Aug 3 07:17:14 EDT 2004
Hallvard B Furuseth wrote:
> Is it possible to write a metaclass or something so that
> with a class definition not much larger than this:
>
> class foo:
> def __init__(self, val): self.val = val
>
> operations on a foo instance f will be applied to f.val?
> E.g. str(f) -> f.__str__() -> f.val.__str__().
I tried in vain to solve your problem while improving my understanding of
metaclasses. I have made an observation that might interest you, though:
str(foo()) and foo.__str__(foo()) are not the same:
>>> class Type(type):
... def __getattribute__(self, name):
... def tostr(self):
... return "so what"
... return tostr
...
>>> class C:
... __metaclass__ = Type
...
>>> print str(C())
<__main__.C object at 0x40296a8c>
>>> print C.__str__(C())
so what
>>>
Care to explain, anyone?
Peter
More information about the Python-list
mailing list