《Python 面向对象全解:从入门到实战,一文搞定!》
·
Python 面向对象全解:从入门到实战,一文搞定!
大家好,我是 亦难。
今天,我将带你一次性吃透 Python 面向对象编程(OOP)的核心知识点,从基础概念到实战应用,一文搞定!
一、面向对象编程思想
1. 什么是面向过程
传统的面向过程编程思想可以用八个字总结:自顶向下,逐步细化。
将要实现的功能分解为一系列步骤,依次完成这些步骤。如果某个步骤复杂,可以进一步细化为子步骤。
例如,报名学习的过程可以分解为以下步骤:
- 学员提出报名,提供相关材料
- 学生缴纳学费,获得缴费凭证
- 教师凭借学生缴费凭证进行分配班级
- 班级增加学生信息
面向过程就是将这些步骤依次执行。
2. 什么是面向对象
面向对象编程的核心是实体和动作。
在上面的报名过程中,有以下动词:提出、提供、缴纳、获得、分配、增加。
这些动词背后都有对应的实体(主体),例如:
- 学生提出报名
- 学生提供相关资料
- 学生缴费
- 机构收费
- 教师分配教室
- 班级增加学生信息
面向对象的核心思想是:将功能封装到实体中,通过实体去实现功能。
3. 使用面向对象实现报名系统开发
第一步:分析动作和实体
- 学生:提出报名、提供资料、缴费
- 机构:收费
- 教师:分配教室
- 班级:增加学生信息
第二步:定义实体类
class Student:
def __init__(self, name):
self.name = name
def enroll(self):
print(f"{self.name} 提出报名")
def provide_materials(self):
print(f"{self.name} 提供相关资料")
def pay_fee(self):
print(f"{self.name} 缴纳学费")
class Institution:
def charge_fee(self):
print("机构收费")
class Teacher:
def assign_classroom(self):
print("教师分配教室")
class Class:
def add_student(self, student):
print(f"班级增加学生信息:{student.name}")
第三步:执行动作
student = Student("张三")
student.enroll()
student.provide_materials()
student.pay_fee()
institution = Institution()
institution.charge_fee()
teacher = Teacher()
teacher.assign_classroom()
classroom = Class()
classroom.add_student(student)
4. 面向对象编程思想迁移
- 面向过程:先想功能,再写函数,按部就班执行。
- 面向对象:先想主体(对象),再封装功能,通过对象调用功能。
面向对象的核心是:封装主体,通过主体实现功能。
5. 面向对象与面向过程的对比
- 代码复用:面向对象模块化更深,数据更封闭和安全。
- 解决问题:面向对象更贴近现实生活,适合解决复杂业务逻辑。
- 开发难度:面向对象前期开发更复杂,但维护和扩展更简单。
- 执行效率:面向过程代码执行效率更高。
二、面向对象的基本概念
1. 对象与类
- 对象:现实世界中的一个实体,例如一个人、一辆车。
- 类:对象的模板,定义了对象的属性和方法。
在 Python 中,通过class关键字定义类,通过类实例化得到对象。
2. 类的定义
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(f"{self.name} 吃零食")
def drink(self):
print(f"{self.name} 喝可乐")
3. 类的实例化
p1 = Person("老王", 18)
p1.eat() # 老王吃零食
p1.drink() # 老王喝可乐
4. self 关键字
self 指向类实例对象本身。
在类的方法中,self 用于访问实例的属性和其他方法。
三、对象的属性添加与获取
1. 属性
- 属性:对象的特征,例如人的姓名、年龄、身高。
- 方法:对象的行为,例如人的吃饭、喝水。
2. 在类的外面添加属性
p1 = Person()
p1.name = "老王"
p1.age = 18
3. 在类的内部获取属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print(f"我的名字:{self.name},我的年龄:{self.age}")
p1 = Person("孙悟空", 500)
p1.speak() # 我的名字:孙悟空,我的年龄:500
四、魔术方法
1. 什么是魔术方法
魔术方法是 Python 中具有特殊功能的方法,通常以双下划线开头和结尾。
例如:
__init__():初始化方法,用于对象初始化。__str__():对象字符串表示方法,用于打印对象时返回字符串。__del__():析构方法,用于对象销毁时执行清理工作。
2. __init__() 方法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("孙悟空", 500)
print(p1.name) # 孙悟空
print(p1.age) # 500
3. __str__() 方法
class Car:
def __init__(self, brand, model, color):
self.brand = brand
self.model = model
self.color = color
def __str__(self):
return f"汽车品牌:{self.brand},汽车型号:{self.model},汽车颜色:{self.color}"
c1 = Car("奔驰", "S600", "黑色")
print(c1) # 汽车品牌:奔驰,汽车型号:S600,汽车颜色:黑色
4. __del__() 方法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print(f"{self.name} 对象已经被删除")
p1 = Person("白骨精", 100)
del p1 # 白骨精对象已经被删除
五、面向对象的三大特性
1. 封装
封装是将对象的属性和方法封装到一个类中,隐藏内部实现细节,只暴露必要的接口。
封装可以分为:
- 公有属性和方法:可以在类的外部访问。
- 私有属性和方法:只能在类的内部访问。
2. 私有属性和方法
通过在属性名或方法名前加上两个下划线 __,可以将属性或方法定义为私有。
class Girl:
def __init__(self, name):
self.name = name
self.__age = 18
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
girl = Girl("小美")
print(girl.get_age()) # 18
girl.set_age(19)
print(girl.get_age()) # 19
3. 封装的意义
- 数据封装:明确区分内外,控制外部对隐藏属性的操作行为。
- 降低复杂度:通过封装,将复杂的逻辑隐藏在类内部,简化外部调用。
六、面向对象的实战案例
案例 1:学员信息类
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def print_grade(self):
if self.score >= 90:
print(f"学员姓名:{self.name},学员成绩:{self.score},优秀")
elif self.score >= 80:
print(f"学员姓名:{self.name},学员成绩:{self.score},良好")
elif self.score >= 70:
print(f"学员姓名:{self.name
更多推荐
所有评论(0)