[ The Bauman Family <[EMAIL PROTECTED]> ] ----------------------------------------------- | Although everybody already knows this, I'm sure, a function actually is | a class,
Hi Tim, I beg to differ with your statement above. A function is not a class. To prove this point follows: >>> def m(x): pass >>> class M(object): pass >>> type(m) <type 'function'> >>> type(M) <type 'type'> >>> Altough they have similarities. To illustrate the most obvious one: >>> callable(m) True >>> callable(M) True | so technically it is a function if you have all the things you | get if you dir() a function. Perhaps this is a duck typing style of defining what an object *is*. But a function is (OO framework sense) definetely an object: >>> isinstance(m,object) True Therefore, a function supports the object protocol: >>> x = object() >>> dir(x) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__'] | >>> afunction.__repr__.__repr__.__repr__.__repr__() | '<method-wrapper object at 0x41152c0c>' | | I wonder how Python deals with this endless chain of __repr__'s. >>> m <function m at 0x402c2a04> This is the function object. >>> m.__repr__() '<function m at 0x402c2a04>' This is the execution of method __repr__() bound to the function object m >>> m.__repr__ <method-wrapper object at 0x402c870c> m.__repr__ is an object (a method-wrapper) representing the method called above. >>> m.__repr__.__repr__ <method-wrapper object at 0x402c878c> Every object supports __repr__, even method-wrapper objects. HTH, best regards, Rod Senra -- ,_ | ) Rodrigo Senra <rsenra |at| acm.org> |(______ ----------------------------------------------- _( (|__|] GPr Sistemas http://www.gpr.com.br _ | (|___|] IC - Unicamp http://www.ic.unicamp.br/~921234 ___ (|__|] L___(|_|] ----------------------------------------------- _______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
