В отношении этого ответа для статической переменной constant вы можете использовать дескриптор. Вот пример:
class ConstantAttribute(object):
'''You can initialize my value but not change it.'''
def __init__(self, value):
self.value = value
def __get__(self, obj, type=None):
return self.value
def __set__(self, obj, val):
pass
class Demo(object):
x = ConstantAttribute(10)
class SubDemo(Demo):
x = 10
demo = Demo()
subdemo = SubDemo()
# should not change
demo.x = 100
# should change
subdemo.x = 100
print "small demo", demo.x
print "small subdemo", subdemo.x
print "big demo", Demo.x
print "big subdemo", SubDemo.x
в результате ...
small demo 10
small subdemo 100
big demo 10
big subdemo 10
Вы всегда можете вызвать исключение, если тихое игнорирование значения настройки (pass
выше) не является вашей вещью. Если вы ищете C ++, переменную статического класса в стиле Java:
class StaticAttribute(object):
def __init__(self, value):
self.value = value
def __get__(self, obj, type=None):
return self.value
def __set__(self, obj, val):
self.value = val
Посмотрите этот ответ и официальные документы HOWTO для получения дополнительной информации о дескрипторах.