面向对象的继承、多继承...

Python 面向对象编程 二 继承和多继承 多重继承的概念适用于高级面向对象设计,其中对象与多个对象有关系,但从多个类继承时必须小心,特别是如果这些类是从一个公共超类继承的。同样,一个类可以从另一个类继承元素。在简单继承或基本继承中,类是从单个父类派生的。在Python中,当一个类从另一个类继承时,它通常会继承组成父类的所有元素,但这可以通过使用命名约定(如双下划线)和访问修饰符来控制。OOP中的继承概念类似于现实世界中的继承,在现实世界中,孩子们在自己的特征之上继承了父母的一些特征。通过代码可以看出,我们可以在通过子类的实例访问父类的属性和方法。 阅读详情

一、继承

1.什么是继承
“”"
让子类直接拥有父类的属性和方法的过程就是继承
父类 - 被继承者(又叫超类)
子类 - 继承者
“”"
2.怎么继承
“”"
class 类名(父类1,父类2,…):
类的说明文档
类的内容

注意: 默认情况下,定义的类继承自 object
“”"

class Person:
    num = 61

    def __init__(self):
        print('Person中init')
        self.name = '小明'
        self.age = 18
        self.gender = '男'
        self.__sex = '女'

    def eat(self):
        print(f'Person:{self.name}在吃饭')

    @classmethod
    def show_num(cls):
        print(f'人类的数量:{cls.num}')

    @staticmethod
    def func1():
        print('人类破坏环境!')

让 Student(子类) 继承 Person(父类)

class Student(Person):
    pass

继承的时候子类可以直接拥有父类所有的属性和方法

print(Student.num)
stu = Student()
print(stu.name, stu.age, stu.gender)
stu.eat()
Student.show_num()
Student.func1()
print(stu.__dict__)

3.在子类中添加内容
“”"
1)在子类中添加类属性和方法
类属性和方法的添加不会因为继承而收到任何影响
2) 添加对象属性
对象属性是怎么被继承:继承的时候因为init方法被继承,间接继承了对象属性

在子类的__init__方法中通过 super()去调用父类的__init__方法
“”"

类中的方法的调用过程(重要)
“”"
通过类或者对象在调用方法的时候,会先看当前类中有没有这个方法,如果有就直接调用自己类中的方法;没有就看父类中有没有定义这个方法,如果父类定义了就调用父类的;父类没有定义,就看父类的父类中有没有定义…以此类推,如果 object 中没有定义才会报错!
“”"


class Teacher(Person):
    title = '老师'

    def __init__(self):
        # 调用父类的init方法
        super().__init__()
        self.school = '千锋'
        self.subject = 'Python'
        self.tea_id = '001'

    def attend_class(self):
        print('老师上课')

    def eat(self):
        super().eat()
        print(f'老师在吃饭')


print(Teacher.num, Teacher.title)
t1 = Teacher()
t1.attend_class()

print(t1.school, t1.subject, t1.tea_id)
print(t1.name)

t1.eat()

二、多继承

class Animal:
    num = 10

    def __init__(self, age, gender):
        self.age = age
        self.gender = gender

    def eat(self):
        print('动物需要吃东西')


class Fly:
    name = '飞行器'

    def __init__(self, height, time):
        self.height = height
        self.time = time

    def stop(self):
        self.height = 0
        print('停止飞行')


class Bird(Animal, Fly):
    pass


b1 = Bird(2, '雌')

两个父类的类属性都可以继承
print(Bird.num)
print(Fly.name)

对象属性只会继承第一个父类的
print(b1.age, b1.gender)
#print(b1.height, b1.time)    # AttributeError: 'Bird' object has no attribute 'height'

两个父类的不同方法都可以继承
b1.eat()
b1.stop()

面试题:

class A:
    def show(self):
        print('A')


class B(A):
    def show(self):
        super(B, self).show()
        print('B')


class C(A):
    def show(self):
        super().show()
        print('C')


class D(B, C):
    def show(self):
        super().show()
        print('D')


print('==============d============')
#mro:DBCA
d = D()
d.show()
#
#print(D.__mro__)
print('===============b===============')
b = B()
b.show()


#面试题扩展
class A:
    def show(self):
        print('A')


class B(A):
    def show(self):
        super().show()
        print('B')


class C(A):
    def show(self):
        super().show()
        print('C')


class D(A):
    def show(self):
        super().show()
        print('D')


class E(B, C):
    def show(self):
        super().show()
        print('E')


class F(C, D):
    def show(self):
        super().show()
        print('F')


class G(F, E):
    def show(self):
        super().show()
        print('G')


print('=========G========')
#mro: GFECDBA
#G
g = G()
g.show()

print('==================')
f = F()
f.show()

super的用法
“”"
super(类, 对象) - 获取指定类的父类(对象必须是类的对象; 类默认指向当前类,对象默认是当前类的对象)
“”"

class A:
    def show(self):
        print('A')
    pass


class B(A):
    def show(self):
        print('B')


class B2:
    def show(self):
        print('B2')


class C(B, B2):
    def show(self):
        # super().show()     # super(C, self).show()
        # super(C, self).show()
        super(B, B()).show()
        print('C')


print('============C:=============')
c = C()
c.show()

三、运算重载和单例模式

from copy import copy

1.运算符重载
“”"
python中使用每一个运算符其本质都是在调用运算符对应的方法(每个运算符都会对应一个固定的方法)。
某种类型的数据支不支持某个运算符,就看这个数据对应的类型中有没有实现运算符对应的方法
“”"

10 + 20     # 10.__add__(20)
'abc' + '123'   # 'abc'.__add__('123')

100 - 10    # 100.__sub__(10)


dict
#{'a': 10} + {'b': 20}


class Person:
    def __init__(self, name='', age=0):
        self.name = name
        self.age = age

    # +
    def __add__(self, other):
        # self + other
        return self.age + other.age

    # *
    def __mul__(self, other):
        list1 = []
        for _ in range(other):
            list1.append(copy(self))
        return list1

    # <
    # 注意:大于符号和小于符号实现其中一个另外一个也可以用
    def __lt__(self, other):
        return self.age < other.age

    def __repr__(self):
        return f'<{str(self.__dict__)[1:-1]}>'


p1 = Person('小明', age=18)
p2 = Person(age=30)
print(p1 == p2)

print(p1 + p2)    # p1.__add__(p2)
#10+20  -> 10.__add__(20)
#10 * 2
print(p1 * 3)    # []

persons = [Person('小花', 20), Person('Tom', 18), Person('张三', 28), Person('李四', 15)]
persons.sort()
print(persons)

#print(p1 > p2)
from copy import copy

1.单例类

class Person:
    __obj = None

    def __new__(cls, *args, **kwargs):
        # print('new')
        # new_obj = super().__new__(cls)
        # print('new:', new_obj)
        # return new_obj
        if not cls.__obj:
            cls.__obj = super().__new__(cls)
        return cls.__obj

    def __init__(self):
        print('init:', self)


p1 = Person()
p2 = Person()
p3 = copy(p1)
print(p1 is p2)
print(p1 is p3)

“”"
def Person(*args, **kwargs):
对象 = Person.new()
对象.init(*args, **kwargs)
return 对象
“”"

Python——面向对象 类的定义、对象、方法以及继承与多继承 Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。 接下来我们先来简单的了解下面向对象的一些基本特征。 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合 阅读详情

相关推荐

[面向对象程序设计] 多继承 和 类图的实现

多继承与类图的实现Qualified association Qualified association Unix文件系统 每一个文件有一个唯一标识 可以在不同文件夹中出现相同的文件, 也可以在同一个文件夹下用不同的文件名指向同一个文件 一个文件夹下的所有名字不能相同 association class 无法描述上述这种文件夹和文件的关系 解决办法 : qualified association ...

weixin_40996518的博客 955

Java核心技术之面向对象8面向对象的多态性

     

green_4321的博客 225

30天入门Python(基础篇)——第22天:面向对象之继承与多继承

本文介绍了Python面向对象编程中的继承特性,包括单继承、多继承及其核心概念。主要内容为:1. 继承的基本概念与优势,如代码复用和扩展性;2. 单继承语法及实际应用示例;3. super()函数的使用方法,包括调用父类构造和保留父类功能;4. 多继承语法与典型案例;5. 方法解析顺序(MRO)原理及查看方式。文章通过动物类层次结构等示例,演示了继承关系、方法重写和属性继承的实际应用,帮助读者掌握面向对象编程的核心特性。

weixin_42636075的博客 4377

C++重要知识清单:完全搞懂继承(单继承、多继承、虚继承)

1.初见继承 1.1引言 面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。学会了类和对像就基本了解数据抽象与封装。继承性是面向对象程序设计最重要的特征,如果没有掌握继承性,就等于没有掌握类和对象的精华。 1.2继承相关概念 简单地说:A is a B;这就是继承关系。比如 :男性和女性相对于人类而言就是一种继承关系。 继承具有传递性,但不具有对称性。 比如:小男孩是男人也是...

weixin_39568744的博客 682

面向对象继承中的合同规则与多继承

本文深入探讨了面向对象编程中继承机制的合同规则,特别是不变量累积、前置条件和后置条件的变化,以及多继承对软件设计的影响。通过分析类继承、特性重声明以及多继承的语义,我们理解了如何在保持类设计灵活性的同时,确保软件的可靠性和可维护性。

weixin_31688273的博客 614

AD20.多对多工程中将某个原理图导入PCB工程

AD20将多个原理图中的一个或多个导入到PCB文件中

鬼爷杂货铺 1万+

【Java面向对象】继承

继承: 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。 extands的意思是“扩展”。子类是父类的扩展。 JAVA中类只有单继承,没有多继承! 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖,组合。聚合等。 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。 子类和父类之间,出意义上讲就是具有“is a”的关系。 object类 super 方法重写 ...

qq_64976935的博客 3162

从零开始:IBM V3700控制器更换与机器代码升级全流程指南

本文详细介绍了IBM V3700存储系统控制器更换与机器代码升级的全流程指南。从前期准备、硬件更换到版本同步,逐步解析如何应对503错误等常见问题,确保系统稳定运行。通过实战案例和优化建议,帮助工程师高效完成维护任务,提升存储系统可用性。

weixin_28365523的博客 309

单继承、多继承、虚继承

单继承1.单继承:一个子类只有一个直接父类时称这个继承关系为单继承; 多继承 2.多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承。 单继承: 多继承: 菱形继承; class Person { public: string _name; //姓名 }; class Student : public Person { protected: int _n...

sophia__yu的博客 3038

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 282

基于MATLAB实现的克里金插值的代码

参考代码 克里金插值matlab代码 youwenfan.com/contentcsb/81657.html。

jghhh01的博客 476

面向对象编程:类的多继承(单纯多继承和多重多继承)

【Python3唯一支持的算法,左图中MRO是MyClass→D→B→C→A→object】C3过于复杂,没必要去记,我们只要记住【object.mro(),显示继承的方法,从左到右依次查找】---当子类继承两个父类,同时两个父类有相同的方法时,不做任何修饰的情况下,子类调用方法时通常执行,先继承的父类。多继承可能会带来二义性,例如,猫和狗都继承自动物类,现在一个类多继承了猫和狗类,猫和狗都有了shout方法,子类究竟继承谁的shout尼?puthon3 中,无论是经典类,还是新式类,都是按广度优先查找。

qq_46044325的博客 1609

网络安全学习路线是怎样的?

为什么要学习安全? 近几年网络安全事件层出不穷,相信大家哪怕没遇到过,但也听过不少了吧。如服务器遭受入侵被黑,用户帐号被盗;被钓鱼、勒索病毒等,这些一旦发生,对企业而言都是不小的打击。因此,网络安全不容忽视,同时随着时代的不断发展,公司对于运维及网络工程师要求也越来越严格。未来越来越吃香的一定是技能方向广的复合型人才。网络安全可以说是一条非常好的发展道路。 今年两会期间,全国政协委员,360集团创始人、董事长周鸿祎提交了关于网络安全行业特殊人才的提案,为广大白帽子人员争取更好...

网安技术分享 8678

Python面向对象——继承和多继承

单继承: 面向对象的主要好处就是代码的重用,实现这一特点通过继承,继承创建的新类成为子类,被继承的类称为父类。 如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。 下面我们开始来讲解继承和多继承 首先我们创建两个类, 父类:Father类  子类:Child 父类中属性为money,和一个方法pla...

qq_37235798的博客 2722

手把手教你学 MATLAB 实战训练(6.5):基础实战实例

MATLAB 是一款强大的数学软件,广泛应用于工程计算、信号处理、控制系统设计、图像处理等领域。学习 MATLAB 不仅可以提高你的编程技能,还能帮助你解决实际的数学和工程问题。下面我将通过几个实战训练实例来教你如何使用 MATLAB。

xiaoheshang_123的博客 363

YOLOv11涨点改进| Kimi团队 2026 |独家创新首发、注意力改进篇|爆火AttnRes残差自注意力模块,含多种创新改进,借助残差思想,缓解细节信息在传播过程中被稀释,促进YOLOv11涨点

🔥本文提出AttnRes残差自注意力模块,通过深度维度的注意力加权机制替代传统固定残差累加方式,使YOLOv11网络能自适应选择更有价值的历史层特征进行聚合。该方法缓解了浅层细节信息在深层传播过程中被稀释的问题,有效融合浅层纹理与深层语义特征,提升小目标、密集目标和复杂场景的检测能力。AttnRes还改善了深层网络的梯度分布与训练稳定性,增强模型收敛质量和泛化能力。实验表明,该模块能以较小计算开销显著提升YOLOv11的特征表达能力、检测精度和整体鲁棒性。文中详细介绍了模块结构、实现原理、优势特点

Ai缝合怪、助力小伙伴高效发论文 119

python中什么是继承和多继承_Python面向对象之多继承和多态

回顾在Python进阶记录之基础篇(十七)中,我们介绍了Python面向对象中继承的基本概念和简单用法以及方法的重写和重载的相关知识点,今天我们讲一下Python面向对象中的多继承和多态。多继承多继承是指一个类继承两个或两个以上的父类,例如有类A、B、C,类C同时继承类A和类B,就说类C多继承了类A和类B,类C可以使用类A和类B中的属性和方法。Python中支持多继承的形式,括号中填入要继承的父类...

weixin_28705087的博客 406

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 258

python面向对象学习三 --多继承+装饰器写多继承+Mixin多继承

多继承 OCP原则: 多用继承,少修改补充OCP – Open -closed Principle (开闭原则) 应该在不修改现有代码的基础上,引入新的功能 继承的用途: 在子类上实现对基类的增强,实现多态 多态 在面向对象中,父类,子类通过继承联系在一起,如果可以通过一套方法,就可以实现不同表现,就是多态一个类继承自多个类就是多继承,它将具有多个类的特征 多继承的弊端 多继承很好的模拟了世界,...

等风来的博客 480

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python学习:面向对象——单继承与多继承

继承 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 01. 单继承 1.1 继承的概念、语法和特点 继承的概念:子类 拥有 父类 的所有 方法 和 属性 1) 继承的语法 class 类名(父类名): ...

景墨轩 928

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

29.Python从入门到精通—Python3 面向对象继承 多继承 方法重写 类属性与方法

由于Student 类继承了 Person 类的 say_hello() 方法,因此在调用子类的 say_hello() 方法时,父类的say_hello() 方法也会被调用。类 A 和 B 分别定义了一个方法 method_a 和 method_b,类 C继承了类 A 和类 B,并且定义了一个方法 method_c。我们还重写了父类 Person 的 say_hello() 方法,并在子类 Student 的 say_hello() 方法中调用了父类的say_hello() 方法,并添加了自己的输出。

weixin_50804299的博客 5476

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

面向对象:Python类中的单继承和多继承

前言 Python面向对象编程语言,有List、Str、Dict、Tuple等数据类型,这些数据类型也是对象,比如List类可以有count方法,我们可以通过count方法统计列表中各个元素的数量。 我们...

colours2009的博客 110

66_Python面向对象编程之多继承

在面向对象编程中,继承是一个让子类可以继承父类的属性和方法的机制。这样,我们就可以避免重复编写相同的代码,并且让代码更加清晰和易于维护。父类就像是我们的模板,子类可以根据这个模板来创建自己的对象。但是,有时候一个子类可能同时继承自多个父类。多继承就是让一个子类同时继承多个父类的属性和方法。这样,子类就可以同时拥有多个父类的特性,实现代码的复用和功能的扩展。今天我们来聊聊Python面向对象编程中的一个重要概念——多继承!子类可以继承父类的非私有属性和非私有方法。子类不可以继承父类的私有属性和私有方法。

在科技的浪潮中,我们寻找着创新的火种,在代码的海洋里,我们编织着智慧的网。腾飞开源,就是这样一个由技术精英汇聚而成的博客平台,我们致力于分享在Java、Python、IoT和人工智能等领域的最新研究成果和实战经验。 在腾飞开源的博客上,你会看到紧跟技术前 630

python面向对象的组合和继承以及多继承

python面向对象的组合和继承以及多继承

Python编程学习的博客 359

29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法

由于Student 类继承了 Person 类的 say_hello() 方法,因此在调用子类的 say_hello() 方法时,父类的say_hello() 方法也会被调用。类 A 和 B 分别定义了一个方法 method_a 和 method_b,类 C继承了类 A 和类 B,并且定义了一个方法 method_c。我们还重写了父类 Person 的 say_hello() 方法,并在子类 Student 的 say_hello() 方法中调用了父类的say_hello() 方法,并添加了自己的输出。

weixin_63740705的博客 4771

python支持单继承和多继承_面向对象:Python类中的单继承和多继承

前言Python面向对象编程语言,有List、Str、Dict、Tuple等数据类型,这些数据类型也是对象,比如List类可以有count方法,我们可以通过count方法统计列表中各个元素的数量。我们可以简单的将定义类理解成就是定义数据结构,同时给这种数据结构制定一些独特的属性或者方法。我们先看最简单的类,在这里我们定义了Point类#为了显示多个调用的变量from IPython.core.in...

weixin_30604459的博客 154
上一篇: 面向对象基础
下一篇: python和json的转换
itwhl
博客等级 码龄6年 3粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值