2013-05-31 75 views
1
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

您是不是要调用'random_thing'? –

回答

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 

类体作为一个功能来执行,与当时形成的类属性的函数的局部命名空间。所以,就像一个函数一样,如果你想引用其他对象,你需要确保它们是首先定义的。

2
class Something(object): 
    @staticmethod 
    def random_thing(): 
     return 4 

    our_random = random_thing 

类定义创建一个命名空间,所以你可以参考类体中的其他名字(类属性),而不需要通过类来访问它们。