没有实例共享变量的组合和层次结构

2024-09-28 01:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

除了丢弃层次结构系统并编写一个大型类,在这个类中我可以防止组合类的值被共享,还有其他方法可以解决这个问题吗?在


Tags: 代码selfobject层次结构initdefclassfirst
2条回答

一种方法是添加

self.variable3 = First()

Third__init__中,这样就可以保持First和{}不变,并防止共享这些值。在

问题来自于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

从而产生预期的结果。在

相关问题 更多 >

    热门问题