[英]Getter or Property function for Class Variables
您可以将@property
装饰器用于实例变量,但是可以对类变量执行类似的操作吗?
我有一个带有config参数的Config
类,但是现在我需要一些config变量,这些变量是其他类变量的函数。 例如,
class Config:
foo = 1
bar = 2
@property
def baz():
return self.foo + 2*self.bar
print(Config.baz)
但是,这不起作用。 它返回< 内置 .property对象>而不是调用该函数的返回值。 有什么建议么?
当然可以,但是就像必须在类上定义属性才能在实例上使用它一样,您也必须在元类上定义一个属性才能在类本身上直接使用它:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.