the annoying, verbose self
Bruno Desthuilliers
bruno.42.desthuilliers at wtf.websiteburo.oops.com
Tue Nov 27 04:11:48 EST 2007
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
>> <bdesth.quelquechose at free.quelquepart.fr> 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.
More information about the Python-list
mailing list