Мне было интересно, возможно ли предотвратить изменение переменной класса Parent, которая будет принята классом Child, который наследуется от класса Parent.
Я бы хотел что-то вроде:
class Parent(object):
foo = 'bar'
class Child(Parent):
pass
Перезапись Parent.foo
также приведет к изменению Child.foo
:
>>> Parent.foo = 'rab'
>>> print Parent.foo
rab
>>> print Child.foo
rab
Есть ли способ предотвратить это или я не хочу этого?
Решение
Читая ответ @quamrana, я понял, что это можно предотвратить с помощью метакласса:
class Meta(type):
def __new__(cls, new, bases, dct):
dct['foo'] = 'bar'
return super(Meta, cls).__new__(cls, new, bases, dct)
class Parent(object):
__metaclass__ = Meta
class Child(Parent):
pass
>>> Parent.foo = 'rab'
>>> print Parent.foo
rab
>>> print Child.foo
bar