limodou wrote: > On 2/8/06, adam johnson <[EMAIL PROTECTED]> wrote: >> Thanks for you answer. >> >> I was under the impression that you could tack methods onto an >> object at any time, your example almost works with old style classes >> and would with a function instead of a method.
In fact it will work if you change the A.hello to self.hello ... class A: def __init__(self): self.__call__ = self.hello def hello (self): print 'Hello, world!' a = A() a() Hello, world! >> So now all I need to know is why now with new style classes the >> special functions need to be defined on the class instead of >> attached to the instance at any time. http://users.rcn.com/python/download/Descriptor.htm > don't need do like above! > > >>> class A: > ... def __init__(self): > ... A.__call__ = A.hello > ... def hello(self): > ... print "Hello, world!" > > >>> a = A() > >>> a() > Hello, world! > > You should review the bound method and unbound method. This has nothing to do with it - in the above example, you are setting the *class* attribute of a user-defined class (which allows setting additional attributes) - which therefore makes instances callable. Compare the equivalent for the current module: import sys def hello (self): print 'Hello, world!' m = sys.modules[__name__] mc = type(m) mc.__call__ = hello Traceback (most recent call last): File "D:\Python\modules\testclasscall.py", line 7, in ? mc.__call__ = hello TypeError: can't set attributes of built-in/extension type 'module' Tim Delaney -- http://mail.python.org/mailman/listinfo/python-list