我有一个python类A和它的子B.我创建一个B类对象传递一些列表类型参数,这些参数附加在B中,结果存储在类A中.我希望能够更改其中一个初始值参数,看到变化反映没有进一步的ado.让我用一个例子来解释一下:
class A():
def __init__(self,data):
self.a=data
class B(A):
def __init__(self,x,y):
self.x=x
self.y=y
A.__init__(self,self.x+self.y)
def change_x(self,x):
self.x = x
Run Code Online (Sandbox Code Playgroud)
现在,我跑了
test = B([1, 2], [3,4])
print(test.a)
Run Code Online (Sandbox Code Playgroud)
我显然得到[1,2,3,4].如果我更改部分列表如下:
test.change_x([3,4])
print(test.a)
Run Code Online (Sandbox Code Playgroud)
我想得到[3,4,3,4],而不是我收到[1,2,3,4].当然test.a仅在实例化期间进行评估.
我理解为什么不是这种情况,我读到了关于生成器但没有设法弄清楚如何实现它.我不想最终得到一个我只能迭代一次的迭代.
谁能帮助我?一个干净的方法解决这个问题?
是否有理由参加课程A?您可以创建一个a在类中返回所需内容的属性或方法B.
class B():
def __init__(self, x, y):
self.x = x
self.y = y
def change_x(self, x):
self.x = x
@property
def a(self):
return self.x + self.y
test = B([1, 2], [3, 4])
print(test.a) # [1, 2, 3, 4]
test.change_x([3, 4])
print(test.a) # [3, 4, 3, 4]
Run Code Online (Sandbox Code Playgroud)
小注意:通过此实现,该change_x方法不是必需的.直接访问属性(例如test.x = x)比使用getter和setter 更通常更像Pythonic .
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |