Behavior of staticmethod in Python 3

Antoon Pardon antoon.pardon at rece.vub.ac.be
Sun Nov 24 05:30:14 EST 2013


Op 23-11-13 22:51, Peter Otten schreef:
> Antoon Pardon wrote:
> 
>> Op 23-11-13 10:01, Peter Otten schreef:
>>
>>>
>>> Your script is saying that a staticmethod instance is not a callable
>>> object. It need not be because
>>>
>>> Foo.foo()
>>>
>>> doesn't call the Foo.foo attribute directly, it calls
>>>
>>> Foo.foo.__get__(None, Foo)()
>>
>> I think you are burdening the programmer with implemantation details
>> that don't matter to him.
>>
>> IMO if Foo.foo() is legal then Foo.foo is callable. That the actual call
>> is delegated to Foo.foo.__get__(None, Foo) shouldn't matter.
> 
> If you read the original post -- I think in this case the details do matter. 
> 
> What is your highlevel explanation for

I don't care about what kind of explanation. I care about a correct answer to
the question whether a particular object is callable (from a programmers point
of view). I'm sure you can give a very comprehensive explanation for why in
this case we get an incorrect answer but that doesn't make the behaviour correct.

Foo.foo() is legal here. So Foo.foo is callable. So you starting with it needn't
be callable is using "callable" with a different meaning than the natural
interpretation. Al the rest is just an attempt in getting others to accept your
use of "callable" instead of the natural one.

Foo.foo() being legal and Foo.foo not being callable is IMO a bug in python. No matter
what explanation you have for the behaviour.

-- 
Antoon Pardon



More information about the Python-list mailing list