目录

  1. 引言
  2. 面向对象编程概述
  3. 类与对象
  4. 构造函数与析构函数
  5. 继承与多态
  6. 封装与私有属性
  7. 类的特殊方法
  8. 完整示例
  9. 总结
  10. 参考资料

1. 引言

面向对象编程(OOP)是 Python 的一项重要特性。通过面向对象编程,开发者可以将数据和操作数据的方法封装到一个独立的单元——类中,从而提高代码的重用性、扩展性和可维护性。本文将详细介绍 Python3 的面向对象编程,包括类与对象的定义、继承、多态以及封装等概念。


2. 面向对象编程概述

什么是面向对象

面向对象是一种编程范式,它将问题抽象为对象,通过对象的属性(数据)和方法(行为)来解决问题。面向对象编程能够模拟现实世界中的实体关系,适合处理复杂的数据和行为。

面向对象的核心概念

  • 类(Class):定义对象的模板,包含属性和方法。
  • 对象(Object):类的实例,通过类来创建具体对象。
  • 封装(Encapsulation):将数据和行为绑定在一起,并隐藏内部实现细节。
  • 继承(Inheritance):允许创建新类继承已有类的属性和方法,提高代码复用性。
  • 多态(Polymorphism):不同对象对相同方法的不同实现,增强程序灵活性。

3. 类与对象

类的定义

使用 class 关键字定义一个类。类中可以包含属性(变量)和方法(函数)。

class Person:
    # 类属性
    species = "Homo sapiens"

    # 构造函数:初始化对象属性
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age

    # 实例方法
    def greet(self):
        print(f"Hello, my name is {self.name} and I'm {self.age} years old.")


对象的创建

使用类来创建对象,调用构造函数来初始化实例属性。

# 创建 Person 类的实例
alice = Person("Alice", 30)
alice.greet()  # 输出: Hello, my name is Alice and I'm 30 years old.

实例属性与方法

  • 实例属性:在构造函数中使用 self 关键字定义,每个实例独有。
  • 实例方法:定义在类中,用于描述对象的行为,并通过 self 引用当前实例。

4. 构造函数与析构函数

  • 构造函数:使用 __init__() 方法初始化对象。
  • 析构函数:使用 __del__() 方法,在对象销毁前执行清理工作(不常用,因为 Python 有垃圾回收机制)。
class Person:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} is born.")

    def __del__(self):
        print(f"{self.name} is being deleted.")

p = Person("Bob")
del p  # 主动删除对象,调用 __del__()


5. 继承与多态

继承

继承允许新类从已有类中获取属性和方法。子类可以继承父类,并扩展或修改其功能。

class Employee(Person):
    def __init__(self, name, age, employee_id):
        super().__init__(name, age)  # 调用父类构造函数
        self.employee_id = employee_id

    def work(self):
        print(f"{self.name} is working.")

emp = Employee("Charlie", 28, "E123")
emp.greet()  # 调用从父类继承的方法
emp.work()

方法重写

子类可以重写父类的方法来实现特定功能。

class Student(Person):
    def greet(self):
        print(f"Hi, I'm student {self.name}.")

student = Student("David", 22)
student.greet()  # 输出: Hi, I'm student David.

多态

多态允许不同类型的对象以相同的接口调用方法,从而实现灵活的代码设计。

def introduce(person):
    person.greet()

introduce(alice)    # alice 是 Person 的实例
introduce(student)  # student 是 Student 的实例,多态调用相应的 greet() 方法


6. 封装与私有属性

封装是面向对象的核心,通过将对象的内部实现隐藏起来,只暴露接口。使用下划线前缀(如 _attr)表示属性为“内部属性”,使用双下划线(如 __attr)表示私有属性(名称改写)。

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

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

    def get_balance(self):
        return self.__balance

acc = Account(100)
acc.deposit(50)
print(acc.get_balance())  # 输出: 150


7. 类的特殊方法

特殊方法以双下划线开始和结束,如 __init__, __str__, __repr__ 等,可用于定义对象的内置行为。

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

    def __str__(self):
        return f"Person: {self.name}"

p = Person("Emma")
print(p)  # 自动调用 __str__(),输出: Person: Emma


8. 完整示例

class Person:
    species = "Homo sapiens"  # 类属性

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

    def greet(self):
        print(f"Hello, I'm {self.name}, and I'm {self.age} years old.")

    def __str__(self):
        return f"{self.name} ({self.age})"


class Employee(Person):
    def __init__(self, name, age, employee_id):
        super().__init__(name, age)
        self.employee_id = employee_id

    def greet(self):
        # 方法重写
        print(f"Hello, I'm {self.name}, an employee with ID {self.employee_id}.")

    def work(self):
        print(f"{self.name} is working.")


# 创建实例
person1 = Person("Alice", 30)
employee1 = Employee("Bob", 28, "E456")

# 调用方法
person1.greet()       # Hello, I'm Alice, and I'm 30 years old.
employee1.greet()     # Hello, I'm Bob, an employee with ID E456.
employee1.work()      # Bob is working.

# 多态示例
def introduce(individual):
    print("Introducing:", individual)
    individual.greet()

introduce(person1)
introduce(employee1)


9. 总结

  • 类与对象:通过 class 定义类,用于描述对象的属性和方法。
  • 构造函数:使用 __init__() 初始化对象。
  • 继承与多态:子类可以继承父类属性和方法,并通过方法重写实现多态。
  • 封装:通过私有属性和方法隐藏内部实现,只暴露必要接口。
  • 特殊方法:如 __str__ 等用于定义对象的内置行为,提升对象的表现力。

掌握面向对象编程是 Python 高级编程的重要一步,它帮助你构建结构清晰、模块化且可维护的代码。


10. 参考资料

  1. Python 官方文档 – 面向对象编程
  2. Real Python – Object-Oriented Programming (OOP) in Python
  3. W3Schools – Python Classes/Objects

站内链接: