![](/img/trans.png)
[英]How to alter a variable defined in a parent class in the child class without altering the parent class variable itself?
[英]Altering parent variable through child class function in Python
所以我最近才开始在 python 中做 OOP 并且我对 OOP 的知识并不多。 我想知道我是否能够通过父 class 创建子类,然后通过创建的子 class 更改父 class 变量?
class Parent:
def __init__(self, var1, var2, var3):
self.var1 = var1
self.var2 = var2
self.var3 = var3
def create_child(self, count):
array = []
for x in range(count):
array.append(Child(var4=self.var1))
return array
class Child(Parent):
def __init__(self, var4):
super(Parent, self).__init__()
self.var4 = var4
def alter_parent_variable(self, value):
self.var1 += value
假设我创建了一个如上所示的代码,我不断收到错误消息:
TypeError: init () missing 3 required positional arguments: 'var1', 'var2', and 'var3'
通过使用此代码进行测试:
test = Parent(20, 50, 1)
array = test.create_child(3)
for x in array:
x.alter_parent_variable(50)
假设我添加了另一个 function,其代码与父 class 中看到的完全相同的代码到子 class 中(如下所列)。 我可以通过子 class 创建的子 class 直接更改父 class 变量吗?
def create_child(self, count):
array = []
for x in range(count):
array.append(Child(var4=self.var1))
return array
您收到TypeError
是因为您调用Parent
的__init__
(当您调用super(Parent, self).__init__()
时)没有提供足够的参数。
您修改Parent
的var1
的方式将不起作用,因为虽然Child
继承自Parent
,但它们不会是相同的 class实例( self
始终指的是 class实例,而不是 ZA2F2ED4F8EBC2CBB4C21A29DC4 本身)。
但是,您可以通过传递self
来传递对Parent
本身的引用,并以这种方式修改var1
。
例如:
class Child(Parent):
def __init__(self, var4, parent: Parent):
self.var4 = var4
self.parent = parent
def alter_parent_variable(self, value):
self.parent.var1 += value
也就是说,根据您最终想要实现的目标,可能会有更好的做事方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.