[Python-Dev] Making staticmethod objects callable? (original) (raw)

Steven Bethard steven.bethard at gmail.com
Wed Mar 1 16:50:21 CET 2006


On 3/1/06, Nicolas Fleury <nidoizo at yahoo.com> wrote:

Basically, should staticmethods be made callable so that the following would not raise an exception:

class A: @staticmethod def foo(): pass bar = foo() There's workarounds, but it's really just about usability. staticmethod could still return a descriptor, but additionnally callable. Is there something I'm missing? Is it error-prone in any way?

My only (mild) concern is that if staticmethod is going to get a call, I think classmethod should probably get one too. Inside a class this doesn't make much sense:

class A(object):
    @classmethod
    def foo(cls):
        pass
    bar = foo(None) # ??

But I guess outside of a class maybe it's okay:

@classmethod
def foo(cls):
    pass

class A(object):
    pass

foo(A)

Anyway, my feeling was that running into this behavior (that staticmethod is not callable) is a good oportunity to explain how descriptors work. And once you start playing around with staticmethod and classmethod, you're going to need to learn that pretty soon anyway. Hiding it a little bit longer with a call method on staticmethod isn't going to help much in the long run.

So I guess I'm -0 if classmethod gets a call too.

STeVe

Grammar am for people who can't think for myself. --- Bucky Katt, Get Fuzzy



More information about the Python-Dev mailing list