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__里的参数