继承:继承就是一个类,继承另外一个类的成员变量(属性)和成员方法
继承的作用:子类通过继承父类的属性和方法,在调用的时候,除了可以使用子类自身的成员方法和属性外,还可以使用父类的属性和方法,因此可以避免书写相同功能的代码,提高了代码整洁性和可维护性。也就是大家讲的看起来很优雅
继承又分为:单继承 和 多继承
语法:
单继承 : class (父类名) pass
多继承: class (父类名1,父类名2,父类名3,......)
区别:没什么太大区别,单继承只继承一个父类身上的属性和方法,多继承继承了多个父类身上的属性和方法,多继承比单继承实现的功能比较丰富,因为继承的父亲多吗?继承就是可以使用父类身上的属性和功能,继承的父类越多功能越发丰富。
#演示单继承 class Emp: def work(self): print('Emp work') def write(self): print("csdn") class pythonDeveloper(Emp): def shitp(self): print ('develop python') pythonDev = pythonDeveloper() pythonDev.work() #调用了父类中的方法 pythonDev.shitp() #调用了自身的方法 pythonDev.write()#调用了父类中的方法
演示多继承:
# 多重继承 class PrintByA3: def ink (self): print("Use ink") #在A3纸上打印文件 class PrintByA4: def print (self): print("print File in A4")#在A4纸上打印文件 class PrintHandler(PrintByA3,PrintByA4): def handleFile(self): print(self) handler = PrintHandler handler.ink(777) #为什么要给self 传入值呢? 我也不知道不传入值会出错,可能是python 3.10 的新特性吧 handler.print(777)
多继承注意事项:
如果子类继承的多个父类中出现相同名称的方法名,那子类在调用时会调用那个方法呢?
class PrintByA3: def print (self): print("print File in A3") #在A3纸上打印文件 class PrintByA4: def print (self): print("print File in A4")#在A4纸上打印文件 class PrintHandler(PrintByA3,PrintByA4): #现在打印PrintByA3方法 #class PrintHandler(PrintByA4,PrintByA3): #如果打开本行的注释 打印 PrintByA4方法,输出print File in A4 pass handler = PrintHandler handler.print(777)
得出的结论:在多继承中,如果出现了子类继承多个父类中出现的方法有相同的情况,注意子类子类继承父类的括号中,父类的先后次序,谁在前,就会使用谁的方法。
关于继承还有几点扩展:
复写使用父类成员:
子类继承父类的成员属性和成员方法后,如果父类不能满足要求,那么可以进行复写,复写就是在子类中修改来自父类的属性和方法。
复写的语法:在子类中重新实现同名成员方法或成员属性即可
class fuck
age = 20 # 属性
sex = '男'
def csdn (self): # 方法
print(学python来csdn)
class fuck2(fuck)
age = 22 # 属性
sex = '未知'
def csdn(self) # 方法
print("学MySQL睡大觉,一教就会")
调用父类同名成员: (文本来源:百度网盘 请输入提取码)实在太懒了
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
方式1:
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
方式2:
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
复写不是将原来父类的属性和方法彻底修改,你可这样理解,子类根据父类的属性名和方法名重新给自己创建一套新的属性和方法除了,属性名和方法名和父类一致,功能发生了变化,其实你可以通过 父类名.成员变量 调用父类的属性, 父类名.成员方法(self) 调用父类的方法,(访问父类中原来的属性和方法),这是为了解决不是父类的方法不好用,是不够用,子类创造了一套,但是有的时候还必须用到父类原来属性和方法。
总结:哪里没太看懂,可以向我留言,空闲时间内会及时回复