Python面向对象编程,从基础到进阶的全面解析

news/2025/3/19 9:12:13/文章来源:https://www.cnblogs.com/yoyoliwu/p/18780311

Python 中的面向对象编程(OOP)是一种编程范式,它通过使用类和对象来模拟现实世界中的事物和行为。以下是关于 Python 面向对象编程的详细介绍:

1. 基本概念

  • 类(Class) :类是创建对象的模板,它定义了一组具有相同属性和方法的对象的结构。例如,一个 Car 类可以定义汽车的属性(如颜色、品牌、速度)和方法(如加速、刹车)。
  • 对象(Object) :对象是类的实例,是根据类创建的具体实体。例如,根据 Car 类创建的 my_car 就是一个对象,它具有自己的颜色、品牌和速度等属性值。
  • 属性(Attribute) :属性是类或对象的变量,用于存储数据。例如,汽车的颜色、品牌等都是属性。
  • 方法(Method) :方法是类或对象中的函数,用于定义对象的行为。例如,汽车的加速和刹车功能可以通过方法来实现。

2. 定义类

在 Python 中,使用 class 关键字来定义类。类的定义通常包括类名、属性和方法。

示例代码

class Car:def __init__(self, color, brand):  # 构造方法self.color = color  # 实例属性self.brand = brandself.speed = 0def accelerate(self):  # 实例方法self.speed += 10print(f"加速后速度为:{self.speed}")def brake(self):self.speed -= 10print(f"刹车后速度为:{self.speed}")@staticmethoddef info():  # 静态方法print("这是一辆汽车")

3. 构造方法

构造方法是一个特殊的方法,用于在创建对象时初始化对象的属性。在 Python 中,构造方法的名称为 __init__

示例

在上面的 Car 类中,__init__ 方法用于初始化汽车的颜色、品牌和速度属性。当创建一个 Car 对象时,需要传入颜色和品牌参数。

my_car = Car("红色", "宝马")
print(my_car.color)  # 输出:红色
print(my_car.brand)  # 输出:宝马

4. 实例方法、类方法和静态方法

  • 实例方法 :实例方法是类中最常见的方法,它以 self 作为第一个参数,用于访问和修改实例属性。例如,acceleratebrake 方法就是实例方法。
  • 类方法 :类方法的第一个参数是 cls,它代表类本身。类方法可以通过类名或实例调用,主要用于操作类属性。定义类方法时需要使用 @classmethod 装饰器。
  • 静态方法 :静态方法不接收 selfcls 参数,它与类或实例无关,只是在类中定义的普通函数。定义静态方法时需要使用 @staticmethod 装饰器。

示例

class Car:total_cars = 0  # 类属性def __init__(self, color, brand):self.color = colorself.brand = brandCar.total_cars += 1  # 修改类属性@classmethoddef get_total_cars(cls):return cls.total_cars@staticmethoddef info():print("这是一辆汽车")# 调用
print(Car.get_total_cars())  # 输出:0
my_car = Car("红色", "宝马")
print(Car.get_total_cars())  # 输出:1
Car.info()  # 输出:这是一辆汽车

5. 继承

继承是面向对象编程中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重写父类的方法,也可以添加新的属性和方法。

示例代码

class Animal:def __init__(self, name):self.name = namedef speak(self):print("动物发出声音")class Dog(Animal):  # Dog 继承 Animaldef speak(self):  # 重写父类方法print("汪汪")class Cat(Animal):def speak(self):print("喵喵")# 调用
my_dog = Dog("旺财")
my_dog.speak()  # 输出:汪汪
my_cat = Cat("咪咪")
my_cat.speak()  # 输出:喵喵

6. 多态

多态是指同一个方法在不同的对象上调用时可以有不同的行为。在 Python 中,多态主要通过方法重写和接口实现。

示例

在上面的继承示例中,DogCat 类都重写了父类 Animalspeak 方法。当调用 my_dog.speak()my_cat.speak() 时,会根据对象的实际类型调用对应的方法,这就是多态的表现。

7. 封装

封装是面向对象编程中的一个重要特性,它将对象的属性和方法封装在一起,隐藏内部实现细节,只对外提供接口。在 Python 中,可以通过使用私有属性(以双下划线开头)来实现封装。

示例代码

class Person:def __init__(self, name, age):self.__name = name  # 私有属性self.__age = agedef get_name(self):  # 提供访问私有属性的接口return self.__namedef set_name(self, name):self.__name = namedef get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageelse:print("年龄不能为负数")# 调用
p = Person("张三", 20)
print(p.get_name())  # 输出:张三
p.set_name("李四")
print(p.get_name())  # 输出:李四
p.set_age(-1)  # 输出:年龄不能为负数

8. 特殊方法

Python 中有一些特殊的方法(也称为魔术方法),它们以双下划线开头和结尾,用于定义类的行为。例如:

  • __str__:定义对象的字符串表示形式,当使用 print() 打印对象时会被调用。
  • __len__:定义对象的长度,当使用 len() 函数时会被调用。
  • __add__:定义对象的加法运算,当使用 + 运算符时会被调用。

示例代码

class MyList:def __init__(self, elements):self.elements = elementsdef __str__(self):return f"MyList({self.elements})"def __len__(self):return len(self.elements)def __add__(self, other):return MyList(self.elements + other.elements)# 调用
my_list1 = MyList([1, 2, 3])
my_list2 = MyList([4, 5, 6])
print(my_list1)  # 输出:MyList([1, 2, 3])
print(len(my_list1))  # 输出:3
my_list3 = my_list1 + my_list2
print(my_list3)  # 输出:MyList([1, 2, 3, 4, 5, 6])

9. 类的组合

类的组合是指在一个类中使用另一个类的对象作为属性。这种方式可以实现代码的复用和模块化。

示例代码

class Engine:def start(self):print("发动机启动")class Car:def __init__(self, engine):self.engine = enginedef start(self):self.engine.start()print("汽车启动")# 调用
engine = Engine()
my_car = Car(engine)
my_car.start()
# 输出:
# 发动机启动
# 汽车启动

10. 面向对象编程的优势

  • 可维护性 :代码结构清晰,易于维护和修改。
  • 可扩展性 :通过继承和组合可以方便地扩展功能。
  • 可重用性 :类和对象可以被重复使用,减少代码冗余。
  • 抽象性 :将复杂问题抽象为类和对象,便于理解和建模。

总之,Python 的面向对象编程是一种强大的编程范式,它可以帮助我们更好地组织代码,提高代码的可维护性和可扩展性。

文章来源于zlibrary图书馆中《Python编程从入门到实践》书的Python面向对象编程章节内容

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023腾讯游戏安全竞赛-PC方向初赛复现

2023腾讯游戏安全竞赛-PC方向初赛复现 第一问 问题描述:在64位Windows10系统上运行contest.exe, 找到明文的信息,作为答案提交(1分) 直接运行程序,在contest.txt中拿到密文ImVkImx9JG12OGtlImV+,很像base64后的结果,但是直接解码得到的不是自然语言,整个exe程序也完全被…

如何选择合适的供应商协同平台,解决数据交互的安全性与高效性?

在当今竞争激烈的商业环境中,企业的供应链管理面临着诸多挑战。传统的供应商合作模式在信息沟通、流程效率等方面存在着明显的问题,这些问题不仅制约了企业的发展,也影响了整个供应链的竞争力,企业需要寻找供应商协同平台,实现企业与供应商之间的信息共享、业务协同和数据…

【深度好文】是时候重新评估您当前的MFT文件传输供应商了

随着文件传输需求的不断演变,更复杂的数据安全威胁的出现、⼈⼯智能等颠覆性技术、成本压⼒以及从医疗保健到⾦融再到供应链等⾏业⽇益严格的监管标准,企业可能需要重新评估其受管文件传输(MFT)供应商。本文将探讨推动企业更换MFT系统的因素,以及在评估潜在新MFT供应商时需…

Nginx错误处理与排查:运维人员的必备手册

前言:在日常的 Web 开发与运维工作中,Nginx 作为一款高性能的 Web 服务器和反向代理工具,被广泛应用于各种项目中。然而,即使是最优秀的工具也难免会遇到各种问题。Nginx 的报错信息虽然简洁,但往往让人摸不着头脑,尤其是对于新手来说,更是如此。而重定向配置,作为 Ngi…

RequestMapping

其中最关键的是path属性(等价于value),它决定了当前方法处理的请求路径,注意路径必须全局唯一,任何路径只能有一个方法进行处理,它是一个数组,也就是说此方法不仅仅可以只用于处理某一个请求路径,我们可以使用此方法处理多个请求路径: @RequestMapping({"/index&…

C#/.NET/.NET Core技术前沿周刊 | 第 30 期(2025年3.10-3.16)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

读DAMA数据管理知识体系指南24数据集成概念(下)

读DAMA数据管理知识体系指南24数据集成概念(下)1. 复制 1.1. 复制技术将分析和查询对主事务操作环境性能的影响降至最低 1.2. 复制解决方案通常监视数据集的更改日志,而不是数据集本身 1.3. 标准复制解决方案是准实时的,数据集的一个副本和另一个副本之间的更改有很小的延迟…

20244112 实验一《Python程序设计》实验报告

20244112 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2441 姓名:李其鲔 学号:20244112 实验教师:王志强 实验日期:2025年3月18日 必修/选修:公选课 1. 实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习…

Groq软件定义的横向扩展张量流多处理器-从芯片到系统架构概述

Groq软件定义的横向扩展张量流多处理器-从芯片到系统架构概述 1.大纲 1)张量流处理器(TSP)背景 2)软件定义的硬件和确定性执行 3)TSP微架构 4)系统封装、拓扑、路由和流控制 5)小结 2.软件定义方法 1)软硬件协同设计并不是什么新鲜事 2)重新检查硬件软件接口 ① 静态-…

Radeon GPU上使用ROCm一些技术点

Radeon GPU上使用ROCm一些技术点 1. 使用最新的高端AMD Radeon™7000系列GPU,将桌面变成机器学习平台 AMD已扩展了对RDNA™3 GPU上机器学习开发的支持,该GPU具有Radeon™软件,适用于Linux 24.10.3和ROCm™6.1.3! 使用PyTorch、ONNX运行时或TensorFlow的机器学习(ML)模型,…

推荐几本书1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

ragflow-naive模式pdf解析 调试日志

测试用例1:test_emf 无图映射解析结果 boxes1: {x0: 70.0, x1: 308.6666666666667, top: 76.0, text: Test with three images in unusual formats, bottom: 90.0, page_number: 1, layout_type: } {x0: 70.66666666666667, x1: 152.33333333333334, top: 109.66666666666667, …