我有两个类,我希望他们能够共享一个公用列表,而不必将其作为参数传递。我还想创建一个可以对列表进行加扰的方法,并且希望该列表在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 = []
此列表也未在此处共享。
我应该如何重组我的设置,使其以我想要的方式工作?
self
是一个实例,因此设置self.lst
仅在该实例上设置。您想在类A
上设置此变量:
A.lst = [...]
代替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 = []
。>
更改该列表,而不是分配一个全新的值。