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