假设我有课
class Class(object):
@register_method_to_later_execution
@classmethod
def my_class_method(cls):
...
和@classmethod
对象。像这样a = Class.my_class_method
我只有在拥有a
对象时才能开始执行它。有可能吗?如果可能的话 - 如何做到这一点?
我创建的问题在导入期间(在装饰器@register_method_to_later_execution
中为my_class_method)创建时引用了
那一刻我只有一个物体,如果我后来试图执行它,它会抛出
class method is not callable
答案 0 :(得分:2)
有点无法自己测试一下。
>>> class MyClass(object):
... @classmethod
... def my_class_method(cls):
... print "hello world"
...
>>> a = MyClass.my_class_method
>>> a
<bound method type.my_class_method of <class '__main__.MyClass'>>
>>> a()
hello world
编辑:如果我从您的编辑中正确理解您(并且我完全不确定我这样做),看起来您在实际定义类之前尝试引用类方法?这是不可能的。
使用@staticmethod
装饰器,因为它没有将类变量作为参数传递。
Edit2:如果你需要这个方法是一个类方法,因为你需要出于某种原因访问类变量,那么你运气不好我建议你重新考虑你的方法,因为这个看起来很奇怪对我而且几乎肯定不是一个好人:)
答案 1 :(得分:0)
按照通常的方式调用它。例如:
In [1]: class Foo(object):
...: @classmethod
...: def my_method(cls):
...: print('in my method')
...:
In [2]: foo = Foo()
In [3]: foo.my_method()
in my method
In [4]: Foo.my_method()
in my method
In [5]: method_reference = Foo.my_method
In [6]: method_reference()
in my method
In [7]: