Python 面向对象编程 (OOP) 学习笔记
核心概念
-
对象 (Object) :现实世界中具体的人、物、事在程序中的数字化身。
- 属性:对象的静态特征(数据),如姓名、年龄。
- 方法:对象的动态行为(操作数据),如说话、吃饭。
-
类 (Class) :抽象的模板或图纸,用于描述一组具有相同属性和方法的对象。
-
关系:类是模板,对象是根据模板创建的具体实例(实例化)。
知识体系思维导图
类的定义与基础语法
在 Python 中,使用 class 关键字定义类。为了区分函数,类名通常采用大驼峰命名法(每个单词首字母大写)。
语法结构:
python
编辑
# Python 3 推荐写法(默认继承 object)
class Person:
# 属性(类属性,相当于出厂设置)
name = '张三'
age = 18
# 方法(定义在类内部的函数)
def speak(self):
# self 代表将来创建出来的那个具体的对象实例
print(f"hello {self.name}")
def eat(self):
print("我有吃饭的能力")
# 在类内部调用其他方法
def day_work(self):
self.speak()
self.eat()
对象的实例化与使用
类定义好后,可以通过“类名 + 括号”来创建对象(实例化)。
代码示例:
python
编辑
# 1. 创建对象
p1 = Person()
# 2. 访问属性
print(p1.name) # 输出: 张三
# 3. 调用方法
p1.speak() # 输出: hello 张三
# 4. 修改实例属性(不影响类本身)
p2 = Person()
p2.name = '李四' # 动态修改属性
p2.age = 20
print(p2.name) # 输出: 李四
p2.speak() # 输出: hello 李四
p2.day_work() # 依次调用 speak 和 eat
深入理解 Self
-
定义:
self代表当前对象本身。 -
作用:在类的方法中,通过
self可以访问当前对象的属性和其他方法。 -
规则:
- 定义方法时:
self必须是第一个参数。 - 调用方法时:Python 会自动传入
self,无需手动传递。
- 定义方法时:
构造方法:__init__
__init__ 是 Python 的初始化方法(构造方法)。当创建对象时,该方法会自动被调用,常用于给对象赋初始值。
代码示例:
python
编辑
class Person:
# 构造方法
def __init__(self, name, age, gender):
self.name = name # 实例属性
self.age = age # 实例属性
self.gender = gender # 实例属性
def speak(self):
print(f"hello {self.name}, 我的年龄为 {self.age}")
# 创建对象时直接传入参数
p1 = Person("孙悟空", 600, "男")
print(p1.name) # 输出: 孙悟空
常用魔法方法
魔法方法是 Python 类中内置的特殊方法,以双下划线开头和结尾。
-
__str__:描述对象- 当我们
print(对象)时,会自动调用该方法。 - 必须返回一个字符串。
- 作用:提供人性化的对象信息展示。
- 当我们
-
__del__:销毁对象- 当对象被删除(如
del obj)或程序结束时自动调用。 - 作用:常用于资源回收,如关闭文件、断开数据库连接。
- 当对象被删除(如
代码示例:
python
编辑
class Car:
def __init__(self, brand, color, price):
self.brand = brand
self.color = color
self.price = price
# 描述对象
def __str__(self):
return f"汽车品牌:{self.brand}, 颜色:{self.color}, 价格:{self.price}"
# 销毁对象时的操作
def __del__(self):
print(f"{self} 被销毁了")
c1 = Car("法拉利", "红色", 1000000)
print(c1) # 自动调用 __str__,输出: 汽车品牌:法拉利...
实战案例:文件操作类
利用 __init__ 打开文件,利用 __del__ 自动关闭文件,确保资源安全。
python
编辑
class FileOperator:
def __init__(self, file_path, default_content=None):
self.f = open(file_path, "w", encoding="utf-8")
if default_content is not None:
self.f.write(default_content)
def write(self, content):
self.f.write(content)
# 对象被销毁时自动关闭文件
def __del__(self):
print(f"文件对象被关闭了")
self.f.close()
# 使用
file = FileOperator("test1.txt", "默认内容")
file.write("abcd")
# 当 file 变量超出作用域或被删除时,__del__ 自动执行
拓展:OS 模块常用操作
os 模块提供了与操作系统交互的功能,常用于文件路径处理。
python
编辑
import os
# 获取当前工作目录
print(os.getcwd())
# 获取当前文件的绝对路径
print(os.path.abspath(__file__))
# 获取当前文件所在的文件夹路径
print(os.path.dirname(os.path.abspath(__file__)))
# 路径拼接 (推荐方式,跨平台兼容)
# os.path.join(目录1, 目录2, 文件名)
print(os.path.join(os.path.dirname(__file__), "__init__.py"))
补充知识:属性查看
-
__dict__:以字典形式存储对象的所有实例属性和值。print(p1.__dict__):查看实例属性。print(Person.__dict__):查看类属性及方法。
-
type():查看对象的类型(所属的类)。