1
class Something(object):
    our_random = Something.random_thing

    @staticmethod
    def random_thing():
         return 4

当然,这不起作用,因为当我尝试调用它的方法时,Something 不存在。这也不是:

class Something(object):
    our_random = random_thing

    @staticmethod
    def random_thing():
         return 4

我已经通过将 random_thing() 的定义放在类上方来“解决”这个问题,但我发现这很混乱。

4

2 回答 2

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

类体作为函数执行,函数的本地命名空间形成类属性。因此,就像函数一样,如果您想引用其他对象,您需要确保首先定义它们。

于 2013-05-31T21:06:11.363 回答
2
class Something(object):
    @staticmethod
    def random_thing():
         return 4

    our_random = random_thing

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

于 2013-05-31T21:08:03.067 回答