1.继承

在程序中,继承描述的是多个类之间的所属关系。

如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。
那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。

案例:

# 父类
class A(object):def __init__(self):self.num=50def 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):passa=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):passc=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=40def 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中面向对象的讲解(2)相关推荐

  1. Python中面向对象的讲解(3)

    1.私有属性和私有方法 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控制. 私 ...

  2. Python中面向对象的讲解(1)

    面向对象编程的2个非常重要的概念: 类和对象 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类用来描述具有相同的属性和方法的 ...

  3. python中split()函数讲解

    python中split()函数讲解 本文讲述的是string.split(s[, sep[, maxsplit]]),针对string类型的split()函数.它主要是切割字符串,结果返回由字符串元 ...

  4. python中面向对象_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  5. python中面向对象的缺点_最简单的方法搞懂Python面向对象

    1.面向对象介绍 2.类和对象 3.面向对象基本语法 面向对象与面向过程面向过程:根据业务逻辑从上到下写代码. 面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能 ...

  6. 简述python中面向对象的概念_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  7. python中面向对象编程简称为_Python基础-面向对象编程

    本文完全转载自廖雪峰大神的教程: 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  8. ​Python中面向对象的编程

    Python面向对象的编程 1概述 (1)面向对象编程 面向对象的编程是利用"类"和"对象"来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是 ...

  9. python中pickle模块讲解

    在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...

最新文章

  1. CentOS7 service network start命令启动时报错解决方法
  2. 浏览器及时感知服务端数据变化的方式
  3. 仅用语音,AI就能“脑补”你的脸! | 技术头条
  4. Eclipse使用技巧收集
  5. javaio流_万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)...
  6. 网络体系架构—运输层协议概述
  7. uni-app插入本地背景图片不能超过40kb解决方法
  8. InfoPath 发布表单到SharePoint库报错
  9. github可以刷星吗_GitHub 没有 star,该写进简历里吗?
  10. 第13讲++连接查询和子查询
  11. paip.索引的种类以及实现attilax 总结
  12. gsonformat安装
  13. 模糊控制算法的C++实现
  14. Android反编译查看源码
  15. IDEA GIT 单文件回退到指定版本
  16. Maven下载安装及修改setting内容
  17. 中国企业家:TD-SCDMA的坎坷商业路
  18. 十、Linux开发板控制LED灯设备
  19. 写代码遇到的灵异事件
  20. 判定通视的计算法公式_水准仪的后视和前视怎么区别?计算公式是什么?

热门文章

  1. 2、SQL的基本书写规则
  2. Acwing第 26 场周赛【完结】
  3. Dubbo监控中心Windows安装
  4. Freemarker的Null处理
  5. C#读取与修改XML文档
  6. Tomcat其他方式启动
  7. 最高75K,至多可拿16薪,这个岗位成财富密码?
  8. Java 中的 Switch 都支持 String 了,为什么不支持 long?
  9. 绝了!这款工具让 SpringBoot 不再需要Controller、Service、DAO、Mapper!
  10. struts2 的form 标签theme属性