我有这样的代码:
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
在调用时尚未定义。是否有其他方法可以从类内部分配类变量?
答案 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'