面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它将程序结构化为对象的集合,每个对象包含数据和操作这些数据的方法。本章将介绍 Python 中的面向对象编程,包括类与对象、继承与多态、特殊方法与运算符重载等内容。

1. 类与对象

1.1 类的定义与实例化

在 Python 中,类是通过 class 关键字定义的。类是一种模板,用于创建对象。对象是类的实例,包含了类的属性和方法。

  1. # 定义一个简单的类
  2. class Dog:
  3. def __init__(self, name, age):
  4. self.name = name
  5. self.age = age
  6. def bark(self):
  7. return f"{self.name} is barking."
  8. # 实例化一个对象
  9. my_dog = Dog("Buddy", 3)
  10. # 访问对象的属性和方法
  11. print(my_dog.name) # 输出: Buddy
  12. print(my_dog.age) # 输出: 3
  13. print(my_dog.bark()) # 输出: Buddy is barking.

1.2 类的属性与方法

类的属性是存储在类中的变量,用于保存对象的状态。而方法是定义在类中的函数,用于执行某些操作。

  1. class Car:
  2. wheels = 4 # 类属性
  3. def __init__(self, make, model):
  4. self.make = make # 实例属性
  5. self.model = model # 实例属性
  6. def drive(self):
  7. return f"The {self.make} {self.model} is driving."

1.3 self 参数的使用

self 参数是指向实例本身的引用,用于访问实例的属性和方法。

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says meow."
  6. my_cat = Cat("Whiskers")
  7. print(my_cat.meow()) # 输出: Whiskers says meow.

2. 继承与多态

2.1 继承的基本概念

继承是一种面向对象编程的特性,允许一个类(子类)继承另一个类(父类)的属性和方法。继承可以实现代码的重用和扩展。

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return f"{self.name} barks."
  9. class Cat(Animal):
  10. def speak(self):
  11. return f"{self.name} meows."
  12. dog = Dog("Buddy")
  13. cat = Cat("Whiskers")
  14. print(dog.speak()) # 输出: Buddy barks.
  15. print(cat.speak()) # 输出: Whiskers meows.

2.2 方法重写与多态

方法重写是指在子类中重新定义父类的方法。多态性是指可以通过父类的引用调用子类的方法。

  1. def animal_sound(animal):
  2. print(animal.speak())
  3. animal_sound(dog) # 输出: Buddy barks.
  4. animal_sound(cat) # 输出: Whiskers meows.

2.3 使用 super() 函数

super() 函数用于调用父类的构造函数或方法。

  1. class Parent:
  2. def greet(self):
  3. return "Hello from Parent"
  4. class Child(Parent):
  5. def greet(self):
  6. parent_greet = super().greet()
  7. return f"{parent_greet} and Hello from Child"
  8. child = Child()
  9. print(child.greet()) # 输出: Hello from Parent and Hello from Child

3. 特殊方法与运算符重载

3.1 常见的特殊方法

特殊方法是以双下划线开头和结尾的方法,用于实现特定的操作,如初始化对象、字符串表示等。

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def __str__(self):
  6. return f"'{self.title}' by {self.author}"
  7. def __len__(self):
  8. return len(self.title)
  9. book = Book("1984", "George Orwell")
  10. print(book) # 输出: '1984' by George Orwell
  11. print(len(book)) # 输出: 4

3.2 运算符重载的实现

运算符重载是指定义特殊方法,使得自定义对象可以使用内置运算符。

  1. class Vector:
  2. def __init__(self, x, y):
  3. self.x = x
  4. self.y = y
  5. def __add__(self, other):
  6. return Vector(self.x + other.x, self.y + other.y)
  7. def __repr__(self):
  8. return f"Vector({self.x}, {self.y})"
  9. v1 = Vector(2, 3)
  10. v2 = Vector(5, 7)
  11. v3 = v1 + v2
  12. print(v3) # 输出: Vector(7, 10)

以上就是本章的内容,通过学习面向对象编程,读者可以更好地组织和管理代码,使代码更加简洁和模块化。在接下来的章节中,我们将深入探讨 Python 的更多高级功能和应用。