Python教程(十):面向对象编程(OOP)
目录
- 专栏列表
- 前言
- 一、面向对象编程概述
- 1.1 类和对象
- 1.2 继承
- 1.3 多态
- 1.4 封装
- 二、Python 中的类和对象
- 2.1 定义类
- 2.2 `__init__` 函数解释
- 2.3 创建对象
- 三、继承
- 3.1 基本继承
- 3.2 创建子类对象
- 四、多态
- 五、封装
- 六. 访问限制
- 七、综合实例
- 结语
专栏列表
- Python教程(一):环境搭建及PyCharm安装
- Python 教程(二):语法与数据结构
- Python 教程(三):字符串特性大全
- Python 教程(四):Python运算符合集
- Python 教程(五):理解条件语句和循环结构
- Python 教程(六):函数式编程
- Python 教程(七):match…case 模式匹配
- Python 教程(八):高级特性【高逼格代码】
- Python 教程(九):内置模块与第三方模块
- Python教程(十):面向对象编程(OOP)
正文开始
,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢
💖💖💖
前言
在现代编程中,面向对象编程(OOP)是一种非常重要的编程范式。Python 作为一种高级编程语言,广泛支持面向对象编程。本篇文章将详细介绍 Python 中 OOP 的基本概念和应用,并通过实例帮助你更好地理解和掌握 OOP。
一、面向对象编程概述
面向对象编程是一种将现实世界中的概念映射到程序中的编程范式。在 OOP 中,基本概念包括类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)。
1.1 类和对象
- 类(Class):类是一个模板,用于定义对象的属性和行为。
- 对象(Object):对象是类的实例,通过类创建。
1.2 继承
继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以重用代码,减少冗余。
1.3 多态
多态允许不同类的对象以相同的方式调用方法,即使这些方法在不同的类中有不同的实现。
1.4 封装
封装是一种将数据和方法绑定在一起,并隐藏对象的内部实现细节的机制。
二、Python 中的类和对象
2.1 定义类
- 在 Python 中,可以使用
class
关键字定义一个类。
class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, 我叫 {self.name} ,今年 {self.age} 岁")
2.2 __init__
函数解释
- 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的
__init__
方法(java 中称为:构造函数),在创建实例的时候,就把name
,age
等属性绑上去: - 注意到
__init__
方法的第一个参数永远是self
,表示创建的实例本身,因此,在__init__
方法内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。 - 有了
__init__
方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__
方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去
2.3 创建对象
使用类名调用,可以创建对象(实例)。
user = Person("子羽", 30)
user.greet() # 输出: Hello, 我叫 子羽 ,今年 30 岁
三、继承
3.1 基本继承
在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类(Subclass),而被继承的 class 称为基类、父类或超类(Base class、Super class)。
通过继承,可以创建一个新的类,这个新类继承了父类的属性和方法。
例如当我们的 A 类需要继承 B 类,我们可以学成
A(B)
示例代码
class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, 我叫 {self.name} ,今年 {self.age} 岁")class Student(Person):def __init__(self, name, age, student_id):super().__init__(name, age) # 使用 super() 可以获取父类的方法self.student_id = student_iddef display(self):print(f"学号: {self.student_id}")
3.2 创建子类对象
student1 = Student("张三", 20, "S12345")
student1.greet() # 输出: Hello, 我叫 张三 ,今年 20 岁
student1.display() # 输出: 学号: S12345
四、多态
多态允许子类定义与父类同名的方法,但是这些方法在不同的类中可以有不同的实现
,例如下面的 Teacher 的问候就会跟 Student 的问候不一样
class Teacher(Person):def greet(self):print(f"Hello, 我是 {self.name} 教授")teacher1 = Teacher("李春华", 40)
teacher1.greet() # 输出: Hello, 我是 李春华 教授
五、封装
封装是将数据(属性)和行为(方法)结合在一起,并隐藏内部细节。
class Account:def __init__(self, owner, balance=0):self.owner = ownerself.__balance = balancedef deposit(self, amount):self.__balance += amountdef get_balance(self):return self.__balanceaccount = Account("约翰")
account.deposit(100)
print(account.get_balance()) # 100
六. 访问限制
命名约定
- 公有属性和方法:使用小写字母。
- 私有属性:使用双下划线前缀。
- 受保护的属性:使用单下划线前缀。
示例代码
class Car:brand = '宝马' # 类属性:公有属性def __init__(self, color):self.color = colorself.__mile = 200000 # 私有def get_mile(self): # 公有方法return self.__milecar = Car('黄色')
print(car.brand) # 宝马
print(car.color) # 黄色
# print(car.__mile) # 'Car' object has no attribute '__mile'
print(car.get_mile()) # 200000
七、综合实例
class Animal:def __init__(self, name):self.name = namedef speak(self):passclass Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"animals = [Dog("小白"), Cat("菊花")]for animal in animals:print(animal.speak())
输出:
小白 says Woof!
菊花 says Meow!
结语
通过本篇文章,我们介绍了 Python 中面向对象编程的基本概念和应用。掌握这些知识能够帮助你更好地组织和管理代码,提高代码的重用性和可维护性。如果你有任何疑问或想法,欢迎在评论区留言讨论。
相关文章:

Python教程(十):面向对象编程(OOP)
目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程(一…...

CTFHUB-文件上传-文件头检查
开启题目 1.php内容: <?php eval($_POST[cmd]);?> 截屏截一个很小很小的图片,保存为 png 格式,把 1.png 和 1.php 放在同一文件夹,在此目录打开 cmd, 使用以下命令把 1.png 和 1.php 合成为图片马 copy 1.pn…...
c语言数组与指针,字符串与指针,指向函数的指针,malloca动态内存分配
数组与指针 数组: - 数组是一种数据结构,可以存储固定大小的一组相同类型的元素。在内存中,数组的元素是连续存储的。 指针: - 指针是一个变量,用于存储内存地址。指针本身占用内存,用来指向某个数据的地址。 数组与指针的关系…...

代码随想录算法训练营day30 | 452. 用最少数量的箭引爆气球 、435. 无重叠区间、763.划分字母区间
碎碎念:加油 参考:代码随想录 452. 用最少数量的箭引爆气球 题目链接 452. 用最少数量的箭引爆气球 思想 局部最优: 让重叠的气球尽量在一起,用一支弓箭射。 全局最优: 用最少数量的箭引爆气球。 首先对气球进行排…...

如何手动修复DLL丢失?2种手动修复dll文件方法
DLL(动态链接库)文件是Windows操作系统中非常重要的组成部分,它们包含了程序运行所需的代码和数据。然而,由于各种原因,如系统更新、软件卸载不当或病毒感染,DLL文件有时会丢失或损坏,导致程序无…...

Node.js(2)——压缩前端html
需求:把回车符(\r)和换行符(\n)去掉后,写入到新的html文件中 步骤: 读取源html文件内容正则替换字符串写入到新的html文件中 示例: 获取html文件中的内容并检查(同时…...
堆的实现-向上调整算法-向下调整算法-堆排序-TopK问题 C语言
堆的实现与堆排序及TopK问题的C语言代码 下面是详细的堆实现,包括向上调整、向下调整算法,以及堆排序和解决TopK问题的完整C语言示例代码。 1. 堆的实现 首先,定义堆的数据结构: #include <stdio.h> #include <stdli…...

【C++BFS】1466. 重新规划路线
本文涉及知识点 CBFS算法 LeetCode1466. 重新规划路线 n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部…...

服务器并发模型
服务器: 单循环服务器:服务器在同一时刻只能响应一个客户端的请求 并发服务器模型:服务器在同一时刻可以响应多个客户端的请求 UDP:无连接 TCP:有连接 1.多进程 资源空间消耗大 效率低 2.多线程 相…...

Chapter 23 数据可视化——地图
欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统(GIS)技术的迅猛发展和大数据时代的到来,数据可视化已经成为分析和理…...

Linux笔记 --- 组合数据类型
结构体 简单的定义结构体的方法 struct student {char name;int age;float score; };//使用student模板创建两个结构体变量 struct student Jack,Rose; 结构体中可以存放除了函数以外的任何数据类型的数据,在创建结构体时student被称为结构体模板名称,…...
DaoCloud-Dockfile文件NGINX文件
Dockfile文件 安装依赖,打包,配置NGINX代理,最后把打完的包复制到服务器相应的文件夹下,构建镜像成功。 # syntax docker/dockerfile:experimental FROM xx.xx.xx.xx/public/node:16.14.2 as builder# LABEL maintainer"e…...
耳机行业中MIC ENC
0 Preface/Foreword ENC: Environment Noise Cancellation,环境降噪,主要指在通话过程中,戴着ENC通话降噪耳机的使用者,即使在嘈杂的环境,比如在嘈杂的街区,开着窗运行的汽车上,说话…...
python-自动化办公-Excel-Openpyxl
Python处理Excel数据之Openpyxl 1.1 Openpyxl库的安装使用 openpyxl模块是一个读写Excel 2010文档的 Python 库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其…...

图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据
深入了解Paper.js:实现SVG和JSON的导入导出功能 Paper.js是一款强大的矢量绘图JavaScript库,非常适合用于复杂的图形处理和交互式网页应用。本文将详细介绍如何在Paper.js项目中实现SVG和JSON格式的导入导出功能,这对于开发动态图形编辑器等…...

[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程
0. 项目移植 对于不想知道其执行过程的朋友来说,可以直接移植,我的板子是STM32F411CER6, 512K M4内核 项目地址: Bootloader(可以自己写标志位用于自测,项目中这部分代码已经被注释,可以打开自行测试&…...

如何手写一个SpringBoot框架
你好,我是柳岸花开。 在这篇文章中,我们将手写模拟SpringBoot的核心流程,让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程,包含两个模块: springboot模块,表示Spring…...
vite解决前端跨域步骤
Vite 解决跨域问题的原理主要是通过其内置的开发服务器功能实现的,具体来说,是通过 HTTP 代理(HTTP Proxy)机制。在开发环境中,Vite 服务器可以配置为一个代理服务器,将前端应用发出的请求转发到实际的后端…...

同步交互与异步交互:深入解析与选择
同步交互与异步交互:深入解析与选择 1、同步交互2、异步交互3、选择策略 💖The Begin💖点点关注,收藏不迷路💖 在软件开发的世界里,交互方式主要分为两大类:同步与异步。下面是对这两种方式的解…...

Day1
首先,大概学习了一下用anaconda去创建一个环境(因为Django是有python版本的要求),然后学着去切换环境。 创建环境:conda create -n django_study python3.10 激活环境:conda activate django_study 删除环…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...