python3中类的继承
用简单的一句话来理解:继承,这样理解就对了,你的就是我的,但是我的还是我的,但是你有我也有的,我就不稀罕你的,所以调用了父类的时候,self就是我,而不是你
子类继承父类,即子类拥有了父类的属性和方法。
python中类的初始化都是__init__()。所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时没有这个函数,那么它便调用父类的__init__();如果实现了这个函数,就会覆盖父类的初始化函数。如果继承父类的__init__(),就需要在子类中显示调用这个函数。实现如下:
input1:
class Animal(object):
def __init__(self):
self.name = "我是父类"
class Panda(Animal):
def __init__(self):
super().__init__() #使用super的方式来显示调用父类的__init__()函数
# 也可以使用第二种super初始化的方式
super(Panda, self).__init__()
if __name__=="__main__":
panda = Panda() #实例化Panda
print(panda.name)
output1:
我是父类
input2:
class Animal(object):
def __init__(self):
self.name = "我是父类"
class Panda(Animal):
def __init__(self):
super().__init__()
self.name = "panda"
if __name__=="__main__":
panda = Panda()
print(panda.name)
self和super的区别:
- self是首先调用自身的方法如果自身没有再去父类中找;super是直接从父类中找方法
- self是类,super是预编译指令
- self class 和super calss的输出是一样的
input3
class Animal(object):
def __init__(self):
self.name = "我是父类"
def A(self): #父类中的A方法
print("父类的A方法")
class Panda(Animal):
def __init__(self):
super().__init__()
self.myname = "panda"
def A(self): #子类中的A方法
print("子类的A方法")
def B(self):
self.A() #self调用A
super().A() #super调用A
if __name__=="__main__":
panda = Panda()
panda.B() #通过B函数来调用A方法,查看self和super的区别
output3
子类的A方法 #我们说过self是先从自身找方法,没有再去父类找
父类的A方法 #而super则是直接从父类中找
参考自: https://www.jb51.net/article/163991.htm