面向对象编程(Object-Oriented Programming, OOP)是Python的核心编程范式之一,它以“对象”为基本单元组织代码,通过类定义对象的结构和行为。类和对象的设计能够提高代码的可复用性、可维护性和扩展性,是构建复杂程序的基础。本文将从类和对象的定义入手,系统梳理其核心知识点,涵盖属性、方法、继承、多态等核心概念。
目录
1. 类与对象的关系
-
类(Class):是对象的抽象模板,定义对象的共同属性和方法。例如,“汽车”类可以包含颜色、品牌等属性,以及启动、加速等方法。
-
对象(Object):是类的具体实例,拥有类定义的属性和方法。例如,“一辆白色比亚迪”是“汽车”类的对象。
class Car: # 定义类
def __init__(self, color, brand):
self.color = color
self.brand = brand
my_car = Car("白色", "比亚迪") # 创建对象
2. 属性:实例属性与类属性
-
实例属性:通过
self
在__init__
方法中定义,每个对象拥有独立的属性值。class Student: def __init__(self, name): self.name = name # 实例属性 stu1 = Student("张三") stu2 = Student("李四") print(stu1.name) # 输出:张三 print(stu2.name) # 输出:李四
-
类属性:直接定义在类内部,所有对象共享,适合存储全局数据。
class Student: school = "第一中学" # 类属性 print(Student.school) # 输出:第一中学(通过类名访问)
3. 方法:实例方法、类方法与静态方法
-
实例方法:操作对象自身,必须包含
self
参数。class Dog: def bark(self): # 实例方法 print("汪汪!") dog = Dog() dog.bark() # 输出:汪汪!
-
类方法:用
@classmethod
装饰,操作类本身,参数为cls
。class Dog: species = "犬科" # 类属性 @classmethod def get_species(cls): return cls.species print(Dog.get_species()) # 输出:犬科
-
静态方法:用
@staticmethod
装饰,与类和实例无关,作为工具函数使用。class MathUtils: @staticmethod def add(a, b): return a + b print(MathUtils.add(3, 5)) # 输出:8
4. 构造函数 __init__
的核心作用
__init__
是类的构造函数,在对象创建时自动调用,用于初始化实例属性。其核心功能包括:
-
初始化对象状态:为对象赋予初始属性值。
-
参数传递:通过构造函数接收外部参数,定义对象特性。
-
强制属性定义:确保对象必须包含某些属性。
示例:
class Book:
def __init__(self, title, author):
self.title = title # 实例属性初始化
self.author = author
# 创建对象时必须传入参数
book = Book("Python入门", "李明")
print(book.title) # 输出:Python入门
注意事项:
-
__init__
方法名固定,不可修改。 -
若未显式定义
__init__
,Python 会提供默认的空构造函数。
5. 继承与多态的实现
-
继承:子类继承父类的属性和方法,避免重复代码。
class Animal: def speak(self): pass class Dog(Animal): # 继承Animal类 def speak(self): # 重写父类方法 return "汪汪!"
-
多态:同一方法在不同子类中表现不同行为。
class Cat(Animal): def speak(self): return "喵喵!" # 多态调用 animals = [Dog(), Cat()] for animal in animals: print(animal.speak()) # 输出:汪汪! 喵喵!
关键点:
-
子类可通过
super()
调用父类方法。 -
抽象类(如
Animal
)可通过abc
模块强制子类实现方法。
6. 特殊方法与对象行为定制
通过实现特殊方法(双下划线方法),可自定义对象的运算符、字符串表示等行为:
-
__str__
:定义对象的用户友好字符串表示(print(obj)
时调用)。 -
__repr__
:定义对象的官方字符串表示(调试时使用)。 -
__add__
:重载加法运算符。
示例:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other): # 重载加法运算符
return Vector(self.x + other.x, self.y + other.y)
def __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(2, 3)
v2 = Vector(1, 4)
print(v1 + v2) # 输出:Vector(3, 7)
7.知识总结
-
类与对象:类是模板,对象是实例,二者共同构成OOP的基础。
-
属性与方法:实例属性描述对象特征,类属性共享数据;实例方法操作对象,类/静态方法提供工具支持。
-
__init__
构造函数:初始化对象属性,确保对象状态正确。 -
继承与多态:通过继承复用代码,多态实现接口统一但行为灵活。
-
特殊方法:定制对象行为(如运算符、字符串表示),增强代码表现力。