如何在继承的实例之间共享类变量?

问题描述 投票:0回答:2

我有两个类,我希望他们能够共享一个公用列表,而不必将其作为参数传递。我还想创建一个可以对列表进行加扰的方法,并且希望该列表在A类和B类中都成为相同的新加扰列表。

我认为这是继承的一种情况,因此我创建了一个父类,并将列表设置为类属性,并设置了加扰的方法,但是现在将列表变量视为子代的实例变量已经足够了。

class A:
    lst = []
    target = 0

    def generateNewLst(self, randomRange, listSize):
        self.lst = [random.randint(*randomRange) for i in range(listSize)]

class B(ListOperationClass):
    def __init__(self):
        super()

class C(ListOperationClass):
    def __init__(self):
        super()

我的继承方法可以正常工作:

a = A()
a.generateNewLst((0,10),3)

a.lst => [2,5,7]

但是当我创建另一个A:

b = A()
b.lst = []

列表未共享。我知道可以通过仅将我的lst变量设置为A特定的类属性来解决此问题,但这并不能解决以下更重要的问题...

c = B()
c.lst = []

此列表也未在此处共享。

我应该如何重组我的设置,使其以我想要的方式工作?

python
2个回答
0
投票

self是一个实例,因此设置self.lst仅在该实例上设置。您想在类A上设置此变量:

A.lst = [...]

0
投票

代替self.lst = [random.randint(*randomRange) for i in range(listSize)],请尝试:A.lst = [random.randint(*randomRange) for i in range(listSize)]

[执行self.lst = ...时,您正在创建一个名为lst的实例变量,该变量现在是特定于实例的,因此无法共享。

类似地,您应该执行b.lst = [],而不是执行A.lst = []。>


0
投票

更改该列表,而不是分配一个全新的值。

© www.soinside.com 2019 - 2024. All rights reserved.