我有两个类,我希望它们能够共享一个公共列表,而不必将其作为参数传递。我还想创建一个方法来置乱这个列表,我希望这个列表在类a和类B中都是相同的新置乱的列表
我认为这是继承的一个例子,所以我创建了一个父类,将list设置为Class属性,并创建了一个方法来置乱,但奇怪的是,list变量现在被视为子类的实例变量
class A:
lst = []
target = 0
def generateNewLst(self, randomRange, listSize):
self.lst = [random.randint(*randomRange) for i in range(listSize)]
class B(A):
pass
class C(A):
pass
我继承的方法工作得很好:
a = B()
a.generateNewLst((0, 10), 3)
a.lst # => [2,5,7]
但当我创建另一个A时:
b = B()
b.lst # => [] not shared
我知道只要将我的lst
变量设置为一个特定的类属性就可以解决这个问题,但这并不能解决下面更重要的问题
c = C()
c.lst # => [] not shared
我应该如何重新组织我的设置以我想要的方式工作
改变列表,而不是指定一个全新的值
每次你想用
改用这个
另一种方法是使用
property
,但它会破坏A.lst
:self
是一个实例,所以设置self.lst
只在该实例上设置。要在类A
上设置此变量:代替
self.lst = [random.randint(*randomRange) for i in range(listSize)]
,改为:A.lst = [random.randint(*randomRange) for i in range(listSize)]
在执行
self.lst = ...
时,您正在创建一个名为lst
的实例变量,该变量现在是实例特定的,因此不共享类似地,您应该改为执行
A.lst = []
,而不是执行b.lst = []
相关问题 更多 >
编程相关推荐