the annoying, verbose self

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Wed Nov 28 08:22:17 EST 2007


Steven D'Aprano a écrit :
> On Tue, 27 Nov 2007 10:11:48 +0100, Bruno Desthuilliers wrote:
> 
>> 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.
> 
> I did say the usual way was to call it and see what happens :)

It's certainly *not* "the usual way" to test if some object is callable 
- it's only ok if you really intented to call it, and even then it might 
be better to test before calling so you distinguish exceptions raised 
from within the called code from exceptions due the the call itself.

> (In Python3, I understand that is what callable() will do.

IIRC, there's no callable() function at all in Python 3.

> 
> I also didn't mention classmethods, staticmethods or functions assigned 
> to attributes. As Ton van Vliet is a beginner, I didn't think he needed 
> to be flooded with too many complications all at once.

Understanding the object model of a (mostly) OO langage is not what I'd 
call "too many complications". But I may be a bit biased !-)

> It's quite 
> possible to program in Python for years and never come across a callable 
> attribute that isn't an ordinary method.

You loose !-)

callable(object.__class__)
=> True



More information about the Python-list mailing list