繁体   English   中英

类变量的Getter或Property函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM