我写了大量代码,这些代码严重依赖于遗产和组合。现在我遇到了一个问题,我的层次结构类需要共享变量才能在彼此之间工作,但这会导致合成的类也被共享,这意味着我的这些类的单独实例将共享我不在的值# 39;不要他们。我显然很难用文字解释这个,所以我写了一些代码。
class First(object):
def __init__(self):
self.subvar1 = 0
self.subvar2 = 10
class Second(object):
variable3 = First()
class Third(Second):
def __init__(self):
self.variable4 = self.variable3.subvar2
Firstinstance = Third()
Secondinstance = Third()
Firstinstance.variable3.subvar1 = 50
Secondinstance.variable3.subvar2 = 0
print Firstinstance.variable3.subvar2 #<-prints 0 but i want 10
print Secondinstance.variable3.subvar1 #<-prints 50 but i want 0
除了转储层次结构系统并编写一个庞大的类,我可以阻止合成的类共享它们的价值之外,还有其他方法可以解决这个问题吗?
答案 0 :(得分:0)
一种方法是添加
self.variable3 = First()
进入__init__
的{{1}},这样您就可以保持Third
和First
不变,并防止共享这些值。
答案 1 :(得分:0)
问题来自Second.variable3
是一个类属性 - 即由类的所有实例及其子类共享。你想要:
class Second(object):
def __init__(self):
self.variable3 = First()
class Third(Second):
def __init__(self):
super(Third, self).__init__()
self.variable4 = self.variable3.subvar2
产生了预期的结果。