问题
I know it's wired to have such a case but somehow I have it:
class foo
#static method
@staticmethod
def test():
pass
# class variable
c = {'name' : <i want to reference test method here.>}
What's the way to it?
Just for the record:
I believe this should be considered as python worst practices. Using static methods is not really pythoish way if ever...
回答1:
class Foo:
# static method
@staticmethod
def test():
pass
# class variable
c = {'name' : test }
回答2:
The problem is static methods in python are descriptor objects. So in the following code:
class Foo:
# static method
@staticmethod
def test():
pass
# class variable
c = {'name' : test }
Foo.c['name']
is the descriptor object, thus is not callable. You would have to type Foo.c['name'].__get__(None, Foo)()
to correctly call test()
here. If you're unfamiliar with descriptors in python, have a look at the glossary, and there's plenty of docs on the web. Also, have a look at this thread, which seems to be close to your use-case.
To keep things simple, you could probably create that c
class attribute just outside of the class definition:
class Foo(object):
@staticmethod
def test():
pass
Foo.c = {'name': Foo.test}
or, if you feel like it, dive in the documentation of __metaclass__.
来源:https://stackoverflow.com/questions/2194185/referencing-static-methods-from-class-variable