关于继承:如何使用Python的super()更新父值?

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"引用传递给孩子?


super只适用于类继承结构,其中Sub1Sub2Master的子类。

在您的示例中,您使用的是一个包含结构,Sub1Sub2Master的属性,而不使用super调用。

此外,您通常不希望使用可变列表作为类属性;附加到它将全局更改列表(在类中定义)的一个副本,而不是每个实例;改为在Master.__init__方法中启动列表:

1
2
3
4
class Master(object):
    mydata = None
    def __init__(self):
        self.mydata = []

调用__init__函数来建立一个新的实例,并通过在那里为self分配一个新的空列表,确保每个实例都有自己的副本。


以下是你继承遗产的方式。您首先拥有父类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