2014-08-30 46 views
0

我有这样的代码:与类的方法分配Python类变量

def my_func(): 
    pass 

class MyClass(): 
    class_variable = my_func() 
    pass 

i = MyClass() 

由于my_func逻辑与MyClass,不服务于它之外的任何目的,我更喜欢有类似的东西,而不是:

class MyClass(): 
    class_variable = my_func() 

    def my_func(): 
     pass 

i = MyClass() 

以上不工作,当然,因为my_func不是在它被称为时间没有定义。有没有其他的方法来从类内部分配一个类变量?

回答

2

我亲自保留my_func()以外的类。当然,它只能用于类定义,但如果它不是有用的一旦定义类,它不应该是类API的一部分。

如果my_func()函数应该与类一起使用,即使在类已经创建之后,仍然可以使用MyClass.my_func()作为静态方法。在这种情况下,定义函数第一设置类变量之前:

class MyClass(): 
    @staticmethod 
    def my_func(): 
     pass 

    class_variable = my_func.__func__() 

@staticmethod不是严格必要的,因为当时class_variable设置my_func仍然是在类定义体内的本地名称。

但是,既然你是使用它作为静态函数无论如何,你也可以这样标记它。但优点是MyClass.my_func()现在也可以使用。

因为@staticmethod不会绑定到类或实例属性上下文之外,所以您首先需要通过访问具有__func__属性的包装函数来解开它。

演示:

>>> class MyClass(): 
... @staticmethod 
... def my_func(): 
...  return 'foobar' 
... class_variable = my_func.__func__() 
... 
>>> MyClass.class_variable 
'foobar' 
>>> MyClass.my_func() 
'foobar'