Steven D'Aprano a écrit :
> On Mon, 26 Nov 2007 21:48:36 +0100, Ton van Vliet wrote:
> 
>> On Mon, 26 Nov 2007 20:14:50 +0100, Bruno Desthuilliers
>> <[EMAIL PROTECTED]> wrote:
>>
>>>> However, I was more thinking in terms of attributes only
>>> Too bad : in Python, everything's an object, so 'methods' are attributes
>>> too.
>> Right, but I'm sure *you* know a way to distinguish between them

Yes : reading the doc. But that's something the compiler will have hard 
time doing.

>> (I'm
>> just a beginner ;-)
> 
> All methods are attributes. Not all attributes are methods. The usual way 
> to see if something is a method is to try calling it and see what 
> happens, but if you want a less informal test, try type():
> 
> 
>>>> type(''.join)
> <type 'builtin_function_or_method'>
>>>> type(Foo().foo)  # with the obvious definition of Foo
> <type 'instancemethod'>
> 


Fine. Now since Python let you define your own callable types and your 
own descriptors, you can as well have an attribute that behave just like 
a method without being an instance of any of the method types - so the 
above test defeats duck typing. And since you can have callable 
attributes that are definitively not methods, you can't rely on the fact 
that an attribute is callable neither.




-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to