在设置类属性时引用方法

时间:2013-05-31 21:05:04

标签: python class static-methods

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()的定义放在类上面而“解决”了这个问题,但我觉得这很麻烦。

2 个答案:

答案 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

类定义创建一个名称空间,因此您可以引用类主体中的其他名称(类属性),而无需通过类访问它们。