How can I use Python's super() to update a parent value?
我对继承是个新手,之前所有关于继承和Python的super()函数的讨论都有点过头了。我当前使用以下代码更新父对象的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env python # test.py class Master(object): mydata = [] def __init__(self): s1 = Sub1(self) s2 = Sub2(self) class Sub1(object): def __init__(self,p): self.p = p self.p.mydata.append(1) class Sub2(object): def __init__(self,p): self.p = p self.p.mydata.append(2) if __name__ =="__main__": m = Master() print m.mydata |
此命令行返回如下:
user@host:~$ ./test.py
[1, 2]
是否有更好的方法来使用super()而不是将"self"引用传递给孩子?
在您的示例中,您使用的是一个包含结构,
此外,您通常不希望使用可变列表作为类属性;附加到它将全局更改列表(在类中定义)的一个副本,而不是每个实例;改为在
1 2 3 4 | class Master(object): mydata = None def __init__(self): self.mydata = [] |
调用
以下是你继承遗产的方式。您首先拥有父类master,然后sub1和sub2将从master继承并成为子类。所有子类都可以访问父类中的方法和变量。这可能是:从python中的子类调用父类的方法?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/usr/bin/env python # test.py class Master(object): mydata = [] def __init__(self): s1 = Sub1() s2 = Sub2() class Sub1(Master): def __init__(self): super(Sub1, self).mydata.append(1) class Sub2(Master): def __init__(self): super(Sub2, self).mydata.append(2) if __name__ =="__main__": m = Master() print m.mydata |