0

我写了一大段严重依赖继承和组合的代码。现在我遇到了一个问题,我的层次结构类需要共享变量才能在彼此之间工作,但这会导致复合类也被共享,这意味着这些类的单独实例将在我不想要的地方共享值他们到。我显然不擅长用文字来解释这一点,所以我写了一些代码。

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

除了转储层次系统并编写一个庞大的类,我可以防止复合类共享其有价值的类,还有其他方法可以解决这个问题吗?

4

2 回答 2

0

一种方法是添加

self.variable3 = First()

进入__init__of Third,因此您可以保持FirstandSecond不变并防止共享这些值。

于 2014-01-07T14:07:26.357 回答
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

这会产生预期的结果。

于 2014-01-07T14:08:38.347 回答