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

目录
  • 1.继承
  • 2.单继承
  • 3.多继承
  • 4.子类重写父类的同名属性和方法
  • 5.子类调用父类同名属性和方法
  • 6.多层继承
  • 7.调用父类方法super()
  • 8.案例

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

(0)

相关推荐

  • Python 多继承中的一个诡异现象 既是 Father又是grandfather

    目录 我们知道,在面向对象编程里面, 继承 是一个很重要的概念.子类可以使用父类的方法和属性. 例如下面这段代码: class Father: def __init__(self): self.address = '上海' def say(self): print('我是爸爸') class Son(Father): def __init__(self): super().__init__() def say(self): print('我是儿子') son = Son() print(son.

  • python面向对象之类的继承详解

    一.概述 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为"子类"或"派生类",被继承的类称为"基类"."父类"或"超类",继承的过程,就是从一般到特殊的过程.在某些 OOP 语言中,一个子类可以继承多个基类.但是一般情况下,一个子类只能有一个基类,要实

  • Python 面向对象编程的三大特性之继承

    目录 Python  面向对象编程的三大特性之继承 一.继承 1.继承的实际栗子 2.继承的好处 3.继承的使用场景 4.继承有几种? 5.Python 中继承的简单语法 二.不使用继承.使用继承的区别 1.需求背景 2.不使用继承 2.使用继承 三.继承的传递性 1.什么是传递性 四.继承和抽象 1.继承的重点 Python  面向对象编程的三大特性之继承 一.继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的

  • python接口,继承,重载运算符详解

    目录 1. 序列__getitem__ 2. __setitem__ 3. 抽象基类 4. 不要直接子类化内置类型 5. 继承顺序 6. 重载运算符 总结 1. 序列__getitem__ 如果没有 __iter__ 和 __contains__ 方法, Python 会调用 __getitem__ 方法, 设法让 迭代 和 in 运算符可用 class Foo: def __getitem__(self, pos): return range(0, 30, 10)[pos] f = Foo()

  • Python中关于面向对象概念的详细讲解

    面向对象编程的2个非常重要的概念: 类和对象 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类是由三部分构成: 类的名称 类的属性 类的方法 格式如下: # 类名 class Func(object): # 类的属性 i=123 # 类的方法 def f(self): print('6666') # 实例化类 a=F

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

    目录 1.继承 2.单继承 3.多继承 4.子类重写父类的同名属性和方法 5.子类调用父类同名属性和方法 6.多层继承 7.调用父类方法super() 8.案例 1.继承 在程序中,继承描述的是多个类之间的所属关系. 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里. 那么类A就是基类,也叫做父类:类B就是派生类,也叫做子类. 案例: # 父类 class A(object): def __init__(self): self.num=50 def print_num(s

  • Python threading模块中lock与Rlock的使用详细讲解

    目录 前言 1.Lock(互斥锁) 2.RLock(可重入锁) 前言 在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock .Rlock .Semaphore .Event .Condition 用来保证线程之间的同步,后者保证访问共享变量的互斥问题. Lock & RLock:互斥锁,用来保证多线程访问共享变量的问题 Semaphore对象:Lock

  • Java中线程上下文类加载器超详细讲解使用

    目录 一.什么是线程上下文类加载器 1.1.重要性 1.2.使用场景 二.ServiceLoader简单介绍 三.案例 3.1.使用ServiceLoader加载mysql驱动 3.2.Class.forName加载Mysql驱动 3.2.1.com.mysql.jdbc.Driver 3.2.2.java.sql.DriverManager初始化 3.2.3.调用DriverManager的registerDriver方法 3.2.4.执行DriverManager.getConnection

  • Python多进程并发与同步机制超详细讲解

    目录 多进程 僵尸进程 Process类 函数方式 继承方式 同步机制 状态管理Managers 在<多线程与同步>中介绍了多线程及存在的问题,而通过使用多进程而非线程可有效地绕过全局解释器锁. 因此,通过multiprocessing模块可充分地利用多核CPU的资源. 多进程 多进程是通过multiprocessing包来实现的,multiprocessing.Process对象(和多线程的threading.Thread类似)用来创建一个进程对象: 在类UNIX平台上,需要对每个Proce

  • Java中JDK动态代理的超详细讲解

    目录 1. 什么是动态代理? 2.动态代理的实现方式有几种? 3. JDK动态代理 4. CGLB动态代理 5.动态代理的效率 6.为什么要使用动态代理呢? 7. JDK动态代理详细使用介绍 总结 1. 什么是动态代理? 动态代理是通过创建代理对象,在不改变原有代码的基础上,给程序增加新的功能,实现了程序的功能增强. 2.动态代理的实现方式有几种? JDK动态代理 CGLB动态代理 3. JDK动态代理 使用了JDK中的InvocationHandler接口,Method类和Proxy类.JDK

  • C语言中的字符(char)详细讲解

    1.字符型(char)简介 字符型(char)用于储存字符(character),如英文字母或标点. 严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际上是整数,而不是字符. 计算机使用特定的整数编码来表示特定的字符. 2. 声明字符型变量 3. 字符常量与初始化 实例: 用 char 类型来专门表示一个字符,例如: char a='1'; char b='$'; char c='X'; char d=' '; // 空格也是一个字符 char e=

  • Python中关于面向对象私有属性方法的详细讲解

    目录 1.私有属性和私有方法 私有属性: 私有方法: 类部调用私有属性和私有方法 子类不能继承父类私有属性和方法 实例属性(对象属性) 通过实例(对象)去修改类属性 2.修改私有属性的值 3.类属性和实例属性 4.类方法和静态方法 类方法: 静态方法: 实例方法 5.__new__方法 6.单例模式 福利 1.私有属性和私有方法 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控

  • 详析Python面向对象中的继承

    目录 一单继承 1.继承的基本语法格式如下 2.查看类继承情况 3.继承中的属性和方法 4.初始化函数__init__()和super 二多层继承 三多重继承 一 单继承 类继承作为python的三大特性之一,在我们学习python的时候是必不可少的.使用类继承,能够大大减少重复代码的编写.现来记录下,python中关于类继承的一些知识点.类的继承有单继承,多层继承以及多重继承,先来看看单继承. 1. 继承的基本语法格式如下 #类继承语法格式,B类继承A类 class A():     类属性

  • 简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象

随机推荐