Python中关于面向对象中继承的详细讲解
1.继承
在程序中,继承描述的是多个类之间的所属关系。
如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。
那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。
案例:
# 父类 class A(object): def __init__(self): self.num=50 def print_num(self): print(self.num+100) # 子类 class B(A): pass b=B() print(b.num) b.print_num()
2.单继承
子类只继承一个父类
案例:
# 父类 class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) # 子类 class B(A): pass a=A() print(a.car) a.print_car() b=B() print(b.car) b.print_car()
子类在继承的时候,在定义类时,小括号()中为父类的名字
父类的属性、方法,会被继承给子类
3.多继承
子类继承多个父类
案例1:
# 父类 class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) def lao_car(self): print('20的大奔') class B(object): def __init__(self): self.car='21款背驰' def print_car(self): print('新款%s'%self.car) def xin_car(self): print('21的大奔') # 子类 class C(A,B): pass c=C() print(c.car) c.print_car() c.lao_car() c.xin_car()
案例2:
# 父类 class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) def lao_car(self): print('20的大奔') class B(object): def __init__(self): self.car='21款背驰' def print_car(self): print('新款%s'%self.car) def xin_car(self): print('21的大奔') # 子类 class C(B,A): pass c=C() print(c.car) # 执行B的属性 c.print_car() # 执行B的方法 print(C.__mro__) # 子类的魔法属性__mro__决定了属性和方法的查找顺序 c.lao_car() # 不重名不受影响 c.xin_car()
多继承可以继承多个父类,也继承了所有父类的属性和方法
注意:如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)
多个父类中,不重名的属性和方法,不会有任何影响。
4.子类重写父类的同名属性和方法
案例:
# 父类 class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) class B(object): def __init__(self): self.car='21款背驰' def print_car(self): print('新款%s'%self.car) # 子类 class C(B,A): def __init__(self): self.car='22款奔驰' def print_car(self): print('最新款%s'%self.car) c=C() print(c.car) # 执行B的属性 c.print_car() # 执行B的方法 print(C.__mro__) # 子类的魔法属性__mro__决定了属性和方法的查找顺序
5.子类调用父类同名属性和方法
案例:
# 父类 class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) class B(object): def __init__(self): self.car='21款背驰' def print_car(self): print('新款%s'%self.car) # 子类 class C(B,A): def __init__(self): self.car='22款奔驰' def print_car(self): print('执行子类的__init__方法前,self.car的属性:%s'%self.car) self.__init__() # 执行本类的__init__方法,属性初始化 print('执行子类的__init__方法前,self.car的属性:%s' % self.car) print('最新款%s'%self.car) def print_lao_car(self): print('执行A的__init__方法前,self.car的属性:%s' % self.car) A.__init__(self) # 执行本类的__init__方法,属性初始化 print('执行A的__init__方法前,self.car的属性:%s' % self.car) A.print_car(self) def print_xin_car(self): print('执行B的__init__方法前,self.car的属性:%s' % self.car) B.__init__(self) # 执行本类的__init__方法,属性初始化 print('执行B的__init__方法前,self.car的属性:%s' % self.car) B.print_car(self) c=C() c.print_car() print('*'*10) c.print_lao_car() print('*'*10) c.print_xin_car() print('*'*10) c.print_car()
6.多层继承
class A(object): def __init__(self): self.car='20款奔驰' def print_car(self): print('老款%s'%self.car) class B(object): def __init__(self): self.car='21款奔驰' def print_car(self): print('新款%s'%self.car) class C(B,A): def __init__(self): self.car='22款奔驰' self.money=40 def print_car(self): self.__init__() print('最新款%s'%self.car) def print_lao_car(self): A.__init__(self) # 执行A类的__init__方法,属性初始化 A.print_car(self) def print_xin_car(self): B.__init__(self) # 执行B类的__init__方法,属性初始化 B.print_car(self) class D(C): # 多层继承 pass d=D() d.print_car() d.print_lao_car() d.print_xin_car()
7.调用父类方法super()
案例:
class Animal(object): def play(self): print('动物就是玩') class Dog(Animal): def play(self): super().play() print('狗改不了吃屎') d=Dog() d.play()
8.案例
class Gupiao(object): def xinqing(self): print('股票买入和卖出') class Gongmu(Gupiao): def lianghua(self): super().xinqing() print('公募机构买入和卖出') class Simu(Gupiao): def lianghua(self): Gupiao.__init__(self) Gupiao.xinqing(self) print('私募机构买入和卖出') def xinqing(self): print('专研自己的输出股票和私募买入和卖出') g=Gongmu() g.lianghua() print('*'*10) s=Simu() s.lianghua() s.xinqing()
关于Python中关于面向对象中继承的详细讲解的文章就介绍至此,更多相关Python 面向对象 继承内容请搜索编程宝库以前的文章,希望大家多多支持编程宝库!
Python编程调用百度API实现地理位置经纬度坐标转换示例:经纬度坐标转换最常见办法就是调用第三方 API,例如百度、高德地图等服务平台,提供了相应的功能接口,它们的这类技术已经非常成熟啦,准确稳定,关键还是免费的 ~本期教程以百度为例( ...