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