python面向对象三大特性

news2024/12/24 20:15:47

面向对象

面向对象编程,是许多编程语言都支持的一种编程思想。

基于模板(类)去创建实体(对象),使用对象去完成功能开发

面向对象的三大特性

  • 封装
  • 继承
  • 多态
封装

封装表示:将现实世界事物的属性和行为,封装到类中,描述成为成员变量和成员方法

在这里插入图片描述

私有成员

既然现实事物有不公开的属性和方法,那么作为现实事物在程序中映射的类,也应该支持

类中提供了私有成员的形式来支持

  • 私有成员变量
  • 私有成员方法

定义私有成员的方式

  • 私有成员变量:变量名以__开头(两个下划线)
  • 私有成员方法:方法名以__开头(两个下划线)

使用私有成员

class Phone:
    IMEI = None  # 序列号
    producer = None  # 厂商

    __current_voltage = None  # 当前电压

    def call_by_5g(self):
        print("5G通话已经开通")

    def __keep_single_core(self):
        print("让cpu以单核模式运行")


phone = Phone()  # 创建对象
phone.__keep_single_core()  # 使用私有方法

私有方法无法被对象直接使用

在这里插入图片描述

使用私有变量

class Phone:
    IMEI = None  # 序列号
    producer = None  # 厂商

    __current_voltage = 30  # 当前电压

    def call_by_5g(self):
        print("5G通话已经开通")

    def __keep_single_core(self):
        print("让cpu以单核模式运行")


phone = Phone()  # 创建对象
print(phone.__current_voltage)

私有变量无法直接使用

在这里插入图片描述

私有成员的意义

在类中提供仅供内部使用的属性和方法,而且不对外开放(类对象无法使用)

继承

继承分为:单继承和多继承

继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有成员)

单继承
class Phone:
    IMEI = None  # 序列号
    producer = "HW"  # 厂商

    def call_by_4g(self):
        print("4g通话")


class Phone2024(Phone):
    face_id = "10001"  # 面部识别id

    def call_by_5g(self):
        print("2024新功能:5g通话")


phone = Phone2024()
print(phone.producer)  # 子类调用父类的属性
phone.call_by_5g()

在这里插入图片描述

多继承

python支持多继承,一个类可以继承多个父类

class 类名(父类1,父类2,父类3...):
    内容体

在这里插入图片描述

class Phone:
    IMEI = None  # 序列号
    producer = "HW"  # 厂商

    def call_by_5g(self):
        print("5g通话")


class NFCReader:
    nfc_type = "第六代"
    producer = "XM"

    def read_card(self):
        print("读取NFC卡")

    def write_card(self):
        print("写入nfc卡")


class RemoteController:
    rc_type = "红外遥控"

    def controller(self):
        print("红外遥控开启")


class MyPhone(Phone, NFCReader, RemoteController):
    pass


phone = MyPhone()
phone.call_by_5g()
phone.read_card()
phone.write_card()
phone.controller()
print(phone.producer)

在这里插入图片描述

多继承的注意事项

多个父类,如有同名的成员,那么默认以继承顺序(从左到右)为优先级

即:先继承的保留,后继承的被覆盖

比如上面的案例中的Phone和NFCReader类中都有producer成员属性

然后继承的时候先继承Phone,所以print(phone.producer)打印的时候打印出的是Phone中的producer的值

pass关键字

pass是占位语句,保证函数、方法、类的完整性,表示无内容,空的意思

重写和使用父类成员

重写

子类继承父类成员属性和方法后,如果对其不满意。那么可以进行重写

即:在子类中重新定义同名的属性和方法即可

class Animal:
    name = "动物"

    def call(self):
        print("动物会叫")

class Cat(Animal):
    name = "小花猫"

    def call(self):
        print("小花猫喵喵叫")


cat = Cat()
print(cat.name)
cat.call()

在这里插入图片描述

Cat类重写的了父类Animal中的属性和方法

使用父类成员

第一种方式:

调用父类成员

使用成员变量:父类名.成员变量

使用成员方法:父类名.成员方法(self)

class Animal:
    name = "动物"

    def call(self):
        print("动物会叫")

class Cat(Animal):
    name = "小花猫"

    def call(self):
        print(Animal.name)
        Animal.call(self)
        print("小花猫喵喵叫")


cat = Cat()
cat.call()

在这里插入图片描述

第二种方式:

使用super()调用父类成员

使用成员变量:super().成员变量

使用成员方法:super().成员方法()

class Animal:
    name = "动物"

    def call(self):
        print("动物会叫")

class Cat(Animal):
    name = "小花猫"

    def call(self):
        print(super().name)
        super().call()
        print("小花猫喵喵叫")


cat = Cat()
cat.call()

在这里插入图片描述

注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类重写

多态

多态指的是多种状态,即完成某个行为,使用不同的对象会得到不同的状态

class Animal:
    def spake(self):
        pass


class Dog(Animal):
    def spake(self):
        print("汪汪汪")


class Cat(Animal):
    def spake(self):
        print("喵喵喵")


def make_noise(animal: Animal):
    animal.spake()


dog = Dog()
cat = Cat()
make_noise(dog)
make_noise(cat)

在这里插入图片描述

多态经常作用在继承关系上

比如:

  • 函数(方法)形参声明接收父类对象
  • 实际传入父类的子类对象进行工作

即:

  • 以父类做定义声明
  • 以子类做实际工作
  • 用以获得同一行为,不同状态

在这里插入图片描述

抽象类(接口)

父类的Animal的spake方法,是空实现

这种设计的含义是:

  • 父类用来确定有哪些方法
  • 具体的方法实现,由子类决定

这种写法就叫做抽象类(也可以称之为接口)

抽象类:含有抽象方法的类

抽象方法:方法体是空实现的(pass)称之为抽象方法

为什么要使用抽象类

在这里插入图片描述

提出标准后

不同的厂家各自实现标准的要求

抽象类就好比定义一个标准

包含了一些抽象的方法,要求子类必须实现

配合多态,完成:

  • 抽象的父类设计(设计标准)
  • 具体的子类实现(实现标准)
class AC:
    def cool_wind(self):
        """制冷"""
        pass

    def hot_wind(self):
        """制热"""
        pass

    def swing_l_r(self):
        """左右摆风"""
        pass


class Midea_AC(AC):
    def cool_wind(self):
        print("美的空调制冷")

    def hot_wind(self):
        print("美的空调制热")

    def swing_l_r(self):
        print("美的空调左右摆风")


class GREE_AC(AC):
    def cool_wind(self):
        print("格力空调制冷")

    def hot_wind(self):
        print("格力空调制热")

    def swing_l_r(self):
        print("格力空调左右摆风")


def make_cool(ac: AC):
    ac.cool_wind()


def make_hot(ac: AC):
    ac.hot_wind()


def make_swing(ac: AC):
    ac.swing_l_r()


midea_ac = Midea_AC()
gree_ac = GREE_AC()

make_cool(midea_ac)
make_cool(gree_ac)

在这里插入图片描述

抽象类的作用:多用于顶层设计(设计标准),以便子类做具体实现

也是对子类的一种软性约束,要求子类必须重写(实现)父类的一些方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打造高质量软件架构 - 9大质量属性

关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认…

球体RCS计算 - 金属球的单站RCS【CST软件分析】

用金属球算RCS雷达散射截面可谓RCS的入门案例,本期用T和I两个求解器算单站RCS进行比较。 Step 1. RCS模板,T-solver, 频率0-5GHz,然后建模,半径10.16cm,可以算出来电尺寸在5GHz大概为三个波长,…

ROS理论与实践学习笔记——2 ROS通信机制之常用的命令

4.1 rosnode操作节点 rosnode:是用于获取节点信息的命令。 rosnode ping 测试到节点的连接状态 rosnode list 列出活动节点 rosnode info 打印节点信息 rosnode machine 列出指定设备上节点 rosnode kill 杀死某个节点 rosnode cleanup 清除不…

Python中的数据处理与分析:从基础到高级

在数据科学和数据分析领域,Python凭借其丰富的库和强大的生态系统,成为了最受欢迎的语言之一。本文将从基础到高级,详细介绍如何使用Python进行数据处理和分析,涵盖数据清洗、数据转换、数据可视化等多个方面。 1. 数据导入与导出…

华为 HCIP-Datacom H12-821 题库 (27)

🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1. 如图,BGP 下有如下配置,下面哪些描述是错误的? A、Time…

Minderbinder:一款基于eBPF的进程安全测试工具

关于Minderbinder Minderbinder是一款基于eBPF的进程安全测试工具,在该工具的帮助下,广大研究人员可以通过注入噪声来测试目标进程的安全性。 Minderbinder 是一款使用 eBPF 将故障注入正在运行的进程的工具。当前版本的Minderbinder 可以通过将 kprobe…

动手学LLM(ch2)

2.1 理解词嵌入 深度神经网络模型,包括大型语言模型(LLMs),无法直接处理原始文本,因为文本是分类数据,与神经网络的数学运算不兼容。为了达到这个目的,需要将单词转换为连续值向量。记住一句话…

“Y模型”—我在3年实操后的个人总结

一直想写一篇关于【需求分析】及【产品设计】方面个人最常用的一些方式方法,对于一些刚入行以及埋头苦干的同学来说,大多数情况都是粗放式凭感觉的分析产品。 因为自己也有过这样的阶段,深知这种思考方式的弊端。从用户场景/反馈到具象化的产…

Linux标准IO(四)-格式化I/O输入

C 库函数提供了 3 个格式化输入函数&#xff0c;包括&#xff1a;scanf()、fscanf()、sscanf()&#xff0c;其函数定义如下所示&#xff1a; #include <stdio.h> int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...); int sscanf(c…

2023年金融科技建模大赛(初赛)开箱点评,多分类模型实战

原创作者Toby&#xff0c;文章来源公众号&#xff1a;python风控模型&#xff0c;2023年金融科技建模大赛&#xff08;初赛&#xff09;开箱点评 各位同学大家好&#xff0c;我是Toby老师。2023年金融科技建模大赛&#xff08;初赛&#xff09;从今年10月14日开始&#xff0c;…

最强反推更新!Joy Caption Alpha One详细测评、在线免费使用

免费教程网站&#xff1a;AI教程_深度学习入门指南 - 站长素材 (chinaz.com) 原文链接&#xff1a;最强反推更新&#xff01;Joy Caption Alpha One详细测评、在线免费使用 (chinaz.com) JoyCaption在一周前悄悄上线了最新版本Joycaption alpha one Joycaption alpha one免费在…

Python进阶:利用NotImplemented优化你的对象交互逻辑,让Python对象间的操作更加智能与灵活

推荐阅读&#xff1a;从混乱到清晰&#xff1a;用NotImplementedError重构你的Python代码&#xff0c;NotImplementedError如何助你打造更健壮的API NotImplemented 在Python中&#xff0c;NotImplemented并不是一个异常类&#xff0c;而是一个特殊的值&#xff0c;用于在二元…

linux桌面软件(wps)内嵌到其他窗口

程序测试环境是&#xff1a;slackware系统&#xff0c;属于linux系统&#xff0c;有桌面&#xff08;Xface Session&#xff09;。系统镜像是&#xff1a;slackware64-15.0-install-dvd.iso。qt、c代码实现。 程序功能&#xff1a;将已经打开的wps&#xff08;word、pdf等都可…

【优选算法】(第五篇)

目录 ⻓度最⼩的⼦数组&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 ⽆重复字符的最⻓⼦串&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 ⻓度最⼩的⼦数组&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - …

分割数组的最大值

题目链接 分割数组的最大值 题目描述 注意点 0 < nums[i] < 10^61 < nums.length < 10001 < k < min(50, nums.length) 解答思路 首先需要理解题意&#xff0c;需要将这个数组分成 k 个非空的连续子数组&#xff0c;找到划分组合中子数组和的最大值最小…

el-table+el-form实现表单校验和解决不垂直居中导致的问题

el-tableel-form实现表单校验 1.实现el-table的表单校验 关键点123 2.解决不垂直居中导致的问题 问题效果图 解决方案 .item-align-center {display: inline-flex; }

OJ在线评测系统 原生Java代码沙箱核心实现流程三 整理封装输出结果 拿到程序执行时间(stopwatch类) 和 运行内存

我们在之前的操作中已经拿到程序进行了编译和运行 接下来我们要将我们的结果输出 整理输出 // 4.收集整理输出结果 ExecuteCodeResponse executeCodeResponse new ExecuteCodeResponse(); ArrayList<String> outputList new ArrayList<>();for (ExecuteMessage…

Library介绍(一)

之前和大家介绍过cell delay是如何计算的。那么&#xff0c;本文将着重和大家介绍一些timing lib中的各个参数定义是什么意思。会分以下几个部分介绍&#xff1a;库属性描述、时序弧介绍、环境描述、单元描述。之前介绍的cell delay template就是单元描述中的一部分。本文主要介…

网络安全入门必备:这四点你做到了吗?

数据的鸿沟无疑是显而易见的&#xff0c;网络安全领域亟需熟练的专业人员。 组织在这方面投入巨大资金&#xff0c;但挑战依旧存在。 根据最新的研究&#xff0c;有64%的违规行为是导致机构过去一年收入损失及/或罚款的主要原因。 60%的组织在努力招聘网络安全人才&#xff…

【市场解读】新能源汽车换代问题

参考文献&#xff1a;百分点舆情中心《新能源汽车换代问题消费者情绪洞察报告》 行业背景 新能源汽车市场竞争加剧&#xff0c;车企不断推陈出新政府发布《汽车以旧换新补贴实施细则》&#xff0c;激励市场发展 *对汽车换代问题媒体关注度与网友讨论度高&#xff0c;正面声量…