Конечно, вы можете, но так же, как свойство должно быть определено в классе, чтобы использовать его в экземпляре, вы должны определить свойство в метаклассе, чтобы иметь возможность использовать его непосредственно в самом классе:
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