Python 面向对象编程 (OOP) 学习笔记_01面相对象

0 阅读4分钟

Python 面向对象编程 (OOP) 学习笔记

核心概念

  • 对象 (Object) :现实世界中具体的人、物、事在程序中的数字化身。

    • 属性:对象的静态特征(数据),如姓名、年龄。
    • 方法:对象的动态行为(操作数据),如说话、吃饭。
  • 类 (Class) :抽象的模板或图纸,用于描述一组具有相同属性和方法的对象。

  • 关系:类是模板,对象是根据模板创建的具体实例(实例化)。

知识体系思维导图

image.png

类的定义与基础语法

在 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() :查看对象的类型(所属的类)。