Day02_面向对象高级

day19-面向对象高级和应用 文章摘要: 本文深入探讨Python面向对象编程的高级特性,重点解析继承、异常处理与反射机制。内容包括:继承补充(mro和c3算法解析)、内置函数补充、异常处理机制及反射应用。通过多继承示例和mro()方法详细展示类成员查找顺序,并对比Python2与Python3在经典类和新式类上的区别。最后介绍异常处理的基本语法和自定义异常,以及反射机制的常见应用场景。掌握这些知识可提升代码重用性、健壮性和灵活性,是Python高级编程的重要技能。 关键词:Python、面向对象、继承、异常处理、反射 阅读详情

面向对象的三大特性

简单介绍

封装 :就是将属性和行为书写到类,隐藏属性和实现细节,仅对外提供公共的访问方式。

封装会隐藏对象的属性和行为,仅对外提供访问权限

  • 优势:能够提高代码的安全性、复写性
  • 弊端:代码量增加(用继承可以缓解这个问题)

继承:多个类中的内容重复性较高时,将重复的内容提炼到一个类中,其他类继承这个类

优势:提高复写性、可维护性

弊端:耦合增强(类与类之前关联过高,父类增加一个成员子类也会增加,但可以使用私有成员缓解这个问题)

多态:同一事物的不同状态(伪多态,java是真多态)

优势:提高可维护性,降低耦合性,高内聚低耦合

高内聚:类独立解决问题的能力

低耦合:类与类之间的关系

一、封装

封装:定义函数的动作叫封装

           定义类,这个类中包含属性和方法也叫封装

私有成员:类内的属性和方法定义时前面加上两个下划线

  • 私有属性:可以区分 类内外,控制外部对隐藏属性的操作
  • 私有方法:可以简化 代码的逻辑,降低代码的复杂性。

私有成员 通过在类内设置对外访问的接口(方法),在类外进行访问。

一般定义函数名' get_xx '方法获取私有属性,定义' set_xx '修改私有属性值。

私有成员 不可被继承。

 私有属性案例:

#私房钱案例
class Person:
    def __init__(self, name):
        self.name = name
        self.__money = 1000    #私有属性不可被访问
    #获取共有多少钱
    def get__money(self):
        return self.__money
    #存入多少钱    
    def set_money(self, money):
        if not isinstance(money, (int, float)):
            print("存入必须是数值")
            return
        self.__money += money 
        return self.__money     
if __name__ == '__main__':
    p=Person("小明")
    #print(p.__money)  #私有属性不可访问
    print(f"配偶看到{p.name}的私房钱有{p.get__money()}")    #配偶看到小明的私房钱有1000
    p.set_money(500.2)
    print(f"又存了一些私房钱,总计:{p.get__money()}元")    #又存了一些私房钱,总计:1500.2元

私有方法案例:

#上一个案例中增加了一个私有方法
class Person:
    def __init__(self, name):
        self.name = name
        self.__money = 1000
    #判断存入的是否为数值
    def __validate_money(self, money):
        return isinstance(money, (int,float)) and money > 0 #返回布尔值
    def set_Money(self, money):
        if self.__validate_money(money): #判断布尔值
            self.__money += money        #布尔值返回结果为True时执行这行代码
    #使用公开方法返回私有属性,这样外部就可以访问到私有属性
    def get_Money(self):
        return self.__money
if __name__ == '__main__':
    p=Person("小明")
    #print(p.__money)  #不可访问
    print(f"配偶看到{p.name}的私房钱有{p.get_Money()}元")
    p.set_Money(500)
    print(f"又存了一些私房钱,总计:{p.get_Money()}元") #最后调用获取,因为要现存

二、继承

继承:一个类从其他类获取属性和行为

所有的类都继承object类

父类=基类=顶级类=超类;子类=派生类=扩展类

重写:子类继承父类后有独有的需求时,通过使用同名私有成员不同值,进行覆盖父类的改写。

子类重写父类成员后,在子类内部访问父类成员的三种方式:

  • 父类名.父类方法名(self)
  • super().父类方法名()
  • super(子类名.self).父类方法名()
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def teach(self):
        print(f"{self.name},1")
class Father(Person):
    def teach(self):
        super().teach()
        print(f"{self.name},3")
class Monther(Person):
    def teach(self):
        super().teach()
        print(f"{self.name},2")
class Child(Father, Monther):
    def teach(self):
        Father.teach(self)
        Monther.teach(self)
        print(f"{self.name},4")
if __name__ == '__main__':
    # 2:创建对象
    c = Child("张三", 18)
    c.teach()
    # 通过子类名.mro()或者__mro__属性获取继承关系
    print(Child.mro())
#输出顺序为123124,原因如图

 

 

三、多态(python中只有伪多态)

多态:同一函数 不同对象 得出不同结果

优势:提高代码的 扩展性

条件:

  • 继承
  • 复写(重写)
  • 父类引用指向子类对象(子类对象赋值给父类对象)
class Animal:
    def speak(self):
        print("voice")
class Dog(Animal):
    def speak(self):
        print("www")
class Cat(Animal):
    def speak(self):
        print("mmm")
class Phone(Animal):
    def speak(self):
        print("lll")
def fun(animal: Animal):
    animal.speak()
if __name__ == '__main__':
    dog = Dog()
    cat = Cat()
    phone = Phone()
    fun(dog)           #www
    fun(cat)           #mmm
    fun(phone)         #lll

面向对象的其他特性

一   、对象属性(实例属性)

是每个对象的属性值,是私有的属性。

#定义格式
对象名.属性名=属性值
self.属性名=属性值
#获取格式
对象名.属性名
self.属性名

二、类属性

在类中,函数外的变量。类属性属于该类所有对象的属性,是共享的属性,a改了这个属性值,b调用后得到的是更改后的

#定义格式
属性名=属性值
#调用格式
类名.类属性名
对象名.类属性名
三、类方法与静态方法 

共同点:都是共享的方法,都可以使用 '类名.类属性名' 调用

不同点:

#类方法:需要至少一个参数,一般用cls(class)
@classmethod
def 类方法名(cls)
#静态方法:没有参数,不需要传参
@staticmethod
def 类方法名()

#演示案例
class Student(object):
    teacher_name="张三"
    @classmethod
    def method1(cls):
        print(cls.teacher_name)
    @staticmethod
    def method2():
        print(Student.teacher_name)
if __name__ == '__main__':
    Student.method1() #类名.类属性名 调用   #张三
    Student.method2()                      #张三

day04面向对象高级 只要是以" ... "方式写出的字符串对象,会存储到字符串常量池中,且相同内容的字符串只会存储一份。作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值。决定组件在容器中的布局方式,避免手动设置每个组件的位置和大小,简化GUI的过程。基于AWT,提供了更丰富的GUI组件,轻量级组件,不依赖于本地窗口系统。//实现随机产生验证码,验证码的每位可能是数字,大写字母,小写字母。类的五大成分之一(成员变量,构造器,方法,的代码块,内部类)如果一个类定义在另一个类的内部,这个类就是内部类。 阅读详情

相关推荐

ESP8266入门(一)固件烧录及常见问题分析

为了实现对数据的远程收集和分析,偶然间发现了esp8266这个模块,对此进行了深入的学习,可是在学习之初遇到了大量的问题,这个系列文章就为大家讲讲我遇到的坑以及解决办法,还有esp8266如何连上oneNet云平台的方法。因为我用的是esp8266nodemcu,可以直接连接usb进行烧录,如果用模块的话接线就比较麻烦,可以去搜搜看.

Jerryxuzherui的博客 8936

day02——面向对象高级

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。比如:Teacher和Student都是People的子类,代码可以写成下面的样子![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/2023072。

2501_91848390的博客 785

中科蓝讯蓝牙耳机SDK实战:从目录解析到消息处理框架

本文深入解析中科蓝讯蓝牙耳机SDK的目录结构与消息处理框架,提供从硬件驱动到蓝牙功能定制的实战指南。重点剖析SDK核心模块如消息队列机制、按键事件处理及电量报告优化,并分享二次开发中的调试技巧与避坑经验,助力开发者高效完成TWS耳机功能定制。

weixin_30335575的博客 383

day02-面向对象高级

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。比如:Teacher和Student都是People的子类,代码可以写成下面的样子。

weixin_70414390的博客 101

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5414

非洲秃鹫优化算法(AVOA)详解:从原理到实战

非洲秃鹫优化算法(AVOA)是一种模拟秃鹫觅食行为的元启发式算法。该算法通过数学建模秃鹫的群体分工、饥饿感知和食物竞争等行为,将优化问题转化为智能觅食过程。AVOA包含四个关键阶段:(1)种群初始化与最佳秃鹫选择;(2)饥饿率控制探索与开发平衡;(3)探索阶段模拟远距离飞行搜索;(4)开发阶段模拟食物源附近的竞争行为。算法采用饥饿率函数实现自适应搜索,初期偏向全局探索,后期转向局部开发。实验表明AVOA在标准测试函数和工程设计问题上表现出优越性能,其创新性在于将秃鹫独特的生物学特性转化为高效的优化机制。

qq_42212808的博客 220

python进阶篇-day02-面向对象高级

实际开发中, 我们发现好多类中的部分内容是相似的, 或者相同的, 每次写很麻烦, 针对于这种情况, 我们可以把这些相似(想同)的部分抽取出来,单独的放到1个类中(父类), 然后让那多个类(子类) 和这个类产生关系, 这个关系就叫: 继承.子承父业, Python中的继承, 子类 => 继承父类的 属性, 行为.Python中支持多继承写法, 即: 1个类可以有多个父类, 写法为: class 子类名(父类名1, 父类名2...)

m0_60916732的博客 1679

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 445

Day02·JS高级-面向对象的四个特点

Day02·面向对象的四个特点 面向对象编程的特点: 1) 抽象性:通过对象来分析具体问题; 2) 封装性:将属性和方法封装到对象中,优点是安全、便于维护; 3) 继承性:将对象属性和方法进行传递; 4) 多态性:一个类产生多种对象;(js中用不到) 构造函数常用方法: 1) 语法:obj instanceof 数据类型  判断变量对应的数据类型; 2) 语法:构造函数.prototype.isPrototypeOf(obj) (原型中的方法)判断对象是否是对应的构造函数中创建的; 3) 语法:

STIG仰望星空的博客 231

【CASS精品教程】035:南方CASS7.1台阶画法案例大全

摘要:本文详细介绍了南方CASS7.1软件中5种台阶工具的使用方法,包括普通台阶、有边台阶、L型台阶、U型台阶和不规则台阶。重点说明各类台阶的绘制步骤和注意事项,如绘制方向(从右下角逆时针连接4个点)、台阶方向标识(白色边为下边)、台阶数自动生成不可更改等特性。同时指出高版本CASS可能存在操作差异,并配以多张示意图直观展示各类台阶的绘制过程和效果,为使用CASS7.1绘制建筑台阶提供了实用指导。(148字)

智慧空间实验室 2907

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 230

JAVA_SE进阶day02面向对象高级 XMind及总结

JAVA_SE进阶day02面向对象高级 XMind及总结,多态,接口,抽象

m0_72963823的博客 289

手把手教你学simulink(16.10)-- 基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目

基于Simulink的IIR滤波器(Infinite Impulse Response Filter)项目的详细实例介绍。这个项目将重点放在IIR滤波器的设计、实现和仿真上,帮助你理解和应用IIR滤波器在信号处理中的作用。

MHD0815的博客 702

面向对象高级day02--知识总结

1).定义: 指的是同一个对象,在不同时刻表现出来的多种形态。2).多态含义:一种事物,多种形态。3).代码体现:父类引用指向子类对象,父类引用调用方法,执行的是子类重写的方法//Animal是父类,变量的类型是Animal就代表父类引用。//Dog是子类,我们new的是Dog的对象就代表指向的子类的对象。继承或实现子类重写方法向上转型(父类应用指向子类对象)/*TODO: 多态1. 含义: 一种事物,多种形态2. 代码体现:父类引用指向子类对象,父类引用调用方法,执行的是子类重写的方法。

weixin_50705923的博客 153

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

增强day02-面向对象高级2

简单的小总结啦qwq

m0_57288751的博客 142

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JAVA_SE进阶day02面向对象高级

JAVA_SE进阶day02面向对象,多态,抽象,接口

m0_72963823的博客 283

AI大模型开发第二阶段Day02python面向对象高级

本文总结了Python面向对象编程中类的定义语法和继承机制。主要内容包括: 定义类的三种语法形式,推荐使用class 类名(object)的新式类定义方式。 继承的概念和作用:提高代码复用率,减少重复代码。 单继承和多继承的实现方法,子类默认继承父类属性和方法。 子类重写父类同名属性和方法的方式,以及使用类名.__mro__查看方法调用顺序。 在子类中调用父类方法的方式,包括使用父类名直接调用。 文章通过摊煎饼师傅与徒弟的案例,生动演示了继承、方法重写和父类方法调用的具体应用场景。

weixin_46411355的博客 434

JS高级进阶总结day02---面向对象编程三大特征,原型链总结

JS高级进阶总结,面向对象编程三大特征,原型链总结

weixin_40630195的博客 242

day19 面向对象高级和应用

day19 面向对象高级和应用 版权声明:本博客转载自路飞学城Python全栈开发培训课件,仅用于学习之用,严禁用于商业用途。 欢迎访问路飞学城官网:https://www.luffycity.com/ 课程目标:掌握面向对象高级知识和相关应用。 今日概要 继承【补充】 内置函数【补充】 异常处理 反射 1. 继承【补充】 对于Python面向对象中的继承,我们已学过: 继承存在意义:将公共的方法提取到父类中,有利于增加代码重用性。 继承的编写方式: # 继承 class Base(objec

mannixiang的博客 214

day01-面向对象高级

面向对象高级篇

2501_91848390的博客 639

day10-面向对象高级1

权限修饰符是用来限制类的成员(成员变量、成员方法、构造器…)能够被访问的范围。每一种权限修饰符能够被访问的范围如下下面我们用代码演示一下,在本类中可以访问到哪些权限修饰的方法。

ZHUSHANGLIN的博客 1105

day11——面向对象高级2

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。比如:Teacher和Student都是People的子类,代码可以写成下面的样子。

ZHUSHANGLIN的博客 1245

HarmonyOS学习Day02

HarmonyOS学习Day02

2301_79727447的博客 1323
上一篇: Day01_面向对象基础
下一篇: Day03_闭包和装饰器
李思 学AI
博客等级 码龄3年 147粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值