新闻动态

Python中关于面向对象中继承的详细讲解

发布日期:2021-12-27 21:15 | 文章来源:CSDN

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 面向对象 继承内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部
请您留言

YINGSOO400-630-3752

提交