Полагаю, это мешает разработчикам случайно перезаписать свойство Test
для спама.Вот почему ты этого хочешь?Я не уверен, что это хорошая идея (что, если разработчик хочет переопределить свойство спама? Зачем создавать препятствия?), Но ...
Вы можете использовать метакласс.Если вы не предоставите установщик для свойства метакласса, то Test.spam
вызовет ошибку AttributeError:
class MetaTest(type):
@property
def spam(cls):
return cls._spam
class Test(object):
__metaclass__=MetaTest
_spam = 42
@classmethod
def get_spam(cls):
cls._spam
@classmethod
def set_spam(cls, value):
cls._spam = value
spam = property(get_spam, set_spam)
print Test.spam
# 42
Но
Test.spam = 24
повышает
AttributeError: can't set attribute