Python 子类通过super函数调用父类

Python中子类调用父类的方法有两种方法能够实现:

1.直接调用父类构造方法,

2.使用super函数。super(FooChild,self).__init__(xxx,xxx)

如下例子:

class A(object):
    def __init__(self,xing,gender):
        self.namea="aaa"
        self.xing = xing
        self.gender = gender
         
    def funca(self):
        print("function a : %s"%self.namea)
  
class B(A):
    def __init__(self,xing,gender,age):
        super(B,self).__init__(xing,age)
        self.nameb="bbb"
        ##self.namea="ccc"
        self.xing = xing.upper()       
        self.age = age + 1
        #self.gender = gender.upper()
         
    def funcb(self):
        print("function b : %s"%self.nameb)
  
b=B("lin","nan",22)
print(b.nameb)
print(b.namea)
print(b.xing)
print(b.age)
b.funcb()
b.funca()
print(b.gender)   ####

   结果如下:

bbb
aaa
LIN
23
function b : bbb
function a : aaa
22

so

1.B类继承A类,在B类自己的基础上可以调用A类所有的方法

2.A、B同时拥有__init__,B会改写A中的__init__方法

3.super函数可以调用A父类中的属性,如namea、xing,B类中有同名属性时,覆盖A类中的同名属性。

4.super函数原理:super().__init__(xxx,xxx)中的xxx参数为类B中输入的参数,但与类A中参数名相对应。如上面那段代码中输入的是age参数,虽然运行结果并没错,但是其实这个age参数是赋值到A类的gender参数上的,如最后的b.gender

5.使用super函数时,可将B子类中与A类相同的参数依次写入__init__(xxx)的xxx参数中(注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出,也不能写),之后可再次重写xxx中参数属性,子类多余参数可自定义属性,如class B的__init__里的参数

猜你喜欢

转载自blog.csdn.net/qq_18668137/article/details/81084516