我有一个类,它包含一些成员 x
(例如,所有实例都需要但独立于它们的一些数据):
class Foo(object):
x = 23
# some more code goes here
现在,确定 x
的过程变得更加复杂,而且我希望能够在特定时间“刷新”x
,所以我决定编写一个额外的函数为之
class Foo(object):
@classmethod
def generate_x(cls):
cls.x = 23
# some more code goes here
但是,此类定义缺少 generate_x
的初始化调用。
到目前为止我尝试了什么:
这不起作用:
class Foo(object):
# generate_x() # NameError: name 'generate_x' is not defined
# Foo.generate_x() # NameError: name 'Foo' is not defined
@classmethod
def generate_x(cls):
cls.x = 23
这可行但不太清楚,因为代码是在类定义之外使用的
class Foo(object):
@classmethod
def generate_x(cls):
cls.x = 23
# ...
Foo.generate_x()
有更好的替代方案吗?使用 @classmethod
是最好的方法吗?我正在搜索的是 __init__
的等效类。
考虑到代码的清晰度,有没有比后者更好的方法来使用函数自动实例化Foo.x
?
最佳答案
实现此目的的一种方法是使用装饰器:
def with_x(cls):
cls.generate_x()
return cls
@with_x
class Foo(object):
@classmethod
def generate_x(cls):
cls.x = 23
(也就是说,我个人会在类声明之后显式调用 Foo.generate_x
,并完全避免所有魔法。)
关于python - 如何使用类方法初始化类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567075/