繁体   English   中英

通过 Python 中的子 class function 更改父变量

[英]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__()时)没有提供足够的参数。

您修改Parentvar1的方式将不起作用,因为虽然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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM