0
点赞
收藏
分享

微信扫一扫

《深入理解 Python 面向对象编程:从入门到实战》

琛彤麻麻 05-17 09:00 阅读 19

一、什么是面向对象编程?

面向对象编程(Object-Oriented Programming,简称 OOP)是一种以对象为中心的编程范式。它强调将数据和操作封装到对象中,从而提高代码的复用性、可扩展性和可维护性。

Python 是一门完全面向对象的语言,所有数据类型都是对象,包括整数、字符串、函数、模块等。

二、Python 中的类与对象

类是对象的蓝图,而对象是类的实例。

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name} 正在汪汪叫!")

# 创建对象
dog1 = Dog("旺财")
dog1.bark()  # 输出:旺财 正在汪汪叫!

关键词说明:

  • class:定义类
  • __init__:构造函数,初始化对象属性
  • self:代表实例本身(类似 this)

三、类的属性与方法

类属性(所有对象共享):

class Student:
    school = "Python大学"  # 类属性

    def __init__(self, name):
        self.name = name  # 实例属性

方法类型

方法类型

说明

定义方式

实例方法

操作实例数据

def method(self):

类方法

操作类属性

@classmethod

静态方法

工具方法,与类无关

@staticmethod

四、继承与多态

继承:子类自动拥有父类的属性和方法。

class Animal:
    def speak(self):
        print("动物发出声音")

class Cat(Animal):
    def speak(self):
        print("喵喵叫")

cat = Cat()
cat.speak()  # 输出:喵喵叫

多态:不同子类的相同方法表现不同。

def make_sound(animal):
    animal.speak()

make_sound(Cat())  # 输出:喵喵叫

五、封装与私有属性

封装是指将属性/方法“隐藏”,防止被随意访问。

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # 私有属性

    def deposit(self, amount):
        self.__balance += amount

    def show_balance(self):
        print(f"余额为:{self.__balance}")

acct = BankAccount(1000)
acct.deposit(500)
acct.show_balance()  # 输出:余额为:1500

私有属性前缀为 __,不可被外部直接访问。

六、特殊方法(魔法方法)

魔法方法是以双下划线开头和结尾的方法,例如:

方法名

作用

__init__

构造函数

__str__

打印对象时显示内容

__repr__

调试打印显示内容

__len__

对象长度

__getitem__

对象支持索引

__eq____lt__

运算符重载

__call__

对象像函数一样被调用

示例:

class Book:
    def __init__(self, title):
        self.title = title

    def __str__(self):
        return f"《{self.title}》"

book = Book("Python编程")
print(book)  # 输出: 《Python编程》

七、组合:类中嵌套类

组合指的是一个类中使用另一个类作为属性。

class Engine:
    def run(self):
        print("发动机启动")

class Car:
    def __init__(self):
        self.engine = Engine()

    def start(self):
        self.engine.run()

car = Car()
car.start()  # 输出:发动机启动

八、类装饰器与元类概念

类装饰器(类也能被修饰):

def log_class(cls):
    class Wrapper(cls):
        def __init__(self, *args, **kwargs):
            print(f"{cls.__name__} 被实例化")
            super().__init__(*args, **kwargs)
    return Wrapper

@log_class
class User:
    def __init__(self, name):
        self.name = name

u = User("Alice")  # 会打印:User 被实例化

九、项目实战:员工管理系统

class Employee:
    raise_rate = 1.05
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def apply_raise(self):
        self.salary = int(self.salary * self.raise_rate)

class Manager(Employee):
    def __init__(self, name, salary, department):
        super().__init__(name, salary)
        self.department = department

    def show_info(self):
        print(f"{self.name} 管理 {self.department} 部门,工资 {self.salary} 元")

m1 = Manager("李雷", 12000, "技术")
m1.apply_raise()
m1.show_info()  # 李雷 管理 技术 部门,工资 12600 元

十、类与模块的组织方式

建议将类分文件存放,结构清晰易维护:

project/
├── main.py
├── models/
│   ├── employee.py
│   ├── manager.py

引用方式:

from models.employee import Employee
from models.manager import Manager

十一、类的类型检查与 isinstance

e = Employee("Tom", 8000)
print(isinstance(e, Employee))  # True
print(isinstance(e, object))    # True

所有类都是 object 的子类。

十二、为什么使用面向对象编程?

优势

描述

高度抽象

抽象出人/车/用户等实体

代码复用

父类方法子类直接使用

易维护

类中局部封装

扩展方便

新需求继承或组合即可

模拟现实

接近人类认知方式

十三、常见 OOP 模式(可拓展学习)

模式

应用场景

工厂模式

统一创建对象

单例模式

系统全局唯一对象

策略模式

多种算法切换

观察者模式

数据变化通知其他模块

装饰器模式

动态添加功能

Python 支持用函数/类实现这些经典设计模式。

十四、Python OOP 学习建议

  1. 从类、对象、方法入手;
  2. 理解继承和组合的差异;
  3. 多写实际项目类封装(如:图书馆系统、客户管理系统等);
  4. 理解魔法方法提升代码高级性;
  5. 结合设计模式思考扩展性与灵活性。

十五、练习题推荐

  1. 编写一个 Book 类,包含书名、作者、价格,支持折扣方法;
  2. 用继承设计一个 AnimalDog 类;
  3. 编写一个 Bank 类,支持转账和余额查询;
  4. 设计一个 UserManager 类,实现用户注册与登录验证;
  5. 设计一个 Shape 抽象类,子类包括 Circle, Rectangle 等,重写 area() 方法。

十六、结语

掌握面向对象编程是走向高级开发者的必经之路。Python 以其简洁优雅的语法,让 OOP 的学习变得更加友好。在今后的 Web 开发、游戏开发、自动化系统、数据建模等方向中,类和对象都将成为你手中的强大工具。

举报

相关推荐

0 条评论