我有一个包含类属性的类。我需要一组其他类将它们作为类属性共享,这样,如果其中任何一个修改了这些属性,就对所有它们都进行了修改。我天真地使用继承对其进行了尝试,但是它并不是那样工作的:每个类的行为就像是对这些类属性拥有自己的“副本”一样。
档案:
# baseClass.py
class BaseClass(object):
iden = 0
# child1.py
from baseClass import BaseClass
class Child1(BaseClass):
@classmethod
def getId(cls):
return cls.iden
# child2.py
from baseClass import BaseClass
class Child2(BaseClass):
@classmethod
def getId(cls):
return cls.iden
我用来测试的文件是:
from child1 import Child1
from child2 import Child2
print(Child1.getId())
Child1.iden = 5
print(Child1.getId())
print(Child2.getId())
我看到的输出:
0
5
0
我应该如何做才能让Child1,Child2和BaseClass共享iden class属性?
您可以通过将iden
属性添加到的元类来实现BaseClass
:
class BaseType(type):
_iden = 0
def _get_iden(cls):
return BaseType._iden
def _set_iden(cls, value):
BaseType._iden = value
iden = property(_get_iden, _set_iden)
class BaseClass(object):
__metaclass__ = BaseType
class Child1(BaseClass):
pass
class Child2(BaseClass):
pass
print Child1.iden
Child1.iden = 5
print Child1.iden
print Child2.iden
输出:
0
5
5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句