使用该类的方法分配Python类变量

时间:2014-08-30 11:53:55

标签: 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在调用时尚未定义。是否有其他方法可以从类内部分配类变量?

1 个答案:

答案 0 :(得分:2)

我个人my_func()留在课堂外。当然,它可能只用于类定义,但是如果一旦定义了类就没用了,它就不应该是类API的一部分。

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

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'