class Something(object):
our_random = Something.random_thing
@staticmethod
def random_thing():
return 4
当然,这不起作用,因为当我试图调用它的方法时,某些东西不存在。这也不是:
class Something(object):
our_random = random_thing
@staticmethod
def random_thing():
return 4
我已经通过将random_thing()的定义放在类上面而“解决”了这个问题,但我觉得这很麻烦。
答案 0 :(得分:3)
在.__init__()
初始化程序中调用它,然后:
class Something(object):
def __init__(self):
self.our_random = Something.random_thing()
或在定义之后调用静态方法,但仍在定义类;因为它是静态方法,您必须通过__func__
属性访问它:
class Something(object):
@staticmethod
def random_thing():
return 4
our_random = random_thing.__func__()
如果您不打算调用它,只需使用不同的名称创建方法的副本,只需在定义后执行此操作:
class Something(object):
@staticmethod
def random_thing():
return 4
our_random = random_thing # our_random as an alias for random_thing
类主体作为函数执行,函数的本地命名空间随后形成类属性。因此,就像一个函数一样,如果你想引用其他对象,你需要确保它们首先被定义。
答案 1 :(得分:2)
class Something(object):
@staticmethod
def random_thing():
return 4
our_random = random_thing
类定义创建一个名称空间,因此您可以引用类主体中的其他名称(类属性),而无需通过类访问它们。