您可以对实例变量使用@property
装饰器,但您可以对类变量执行类似的操作吗?
我有一个带有配置参数的 Config 类,但是我现在需要一些配置变量,它们是其他类变量的函数。例如,
class Config:
foo = 1
bar = 2
@property
def baz():
return self.foo + 2*self.bar
打印(Config.baz)
但这不起作用。它返回<builtin.property object>而不是调用函数的返回值。有什么建议吗?
最佳答案
当然可以,但就像必须在类上定义属性才能在实例上使用它一样,您必须在元类上定义属性才能直接在类本身上使用它:
class ConfigType(type):
@property
def baz(cls):
return cls.foo + 2*cls.bar
class Config(metaclass=ConfigType):
foo = 1
bar = 2
print(Config.baz)
将打印5
。
当您执行此操作时,属性在实例上根本不可见,仅在类上可见,但您可以在这两个位置定义它,并且这两个定义不会干扰:
class ConfigType(type):
@property
def baz(cls):
return cls.foo + 2*cls.bar
class Config(metaclass=ConfigType):
foo = 1
bar = 2
@property
def baz(self):
return self.foo + 2*self.bar
config = Config()
config.foo = 3
print(Config.baz, config.baz)
打印 5 7
关于python - 类变量的 Getter 或 Property 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945814/