Python 面向对象编程(OOP)
面向对象编程把程序里的概念组织成对象:对象持有数据(属性)并提供行为(方法)。类是创建对象的蓝图;继承复用并扩展行为;多态让不同类对「同一套操作」各自实现。Python 同时支持 OOP 与其它范式(如过程式、函数式),可按场景混用。
本篇是概览;细节见各专题:
类(class)
类描述一类对象共有的结构与能力,本身不是运行时里的那个「具体个体」。定义类时通常还不会为「某个具体对象」分配专属状态(实例在实例化时创建)。
语法:
python
class 类名:
pass示例:
python
class Animal:
pass对象(实例)
对象是类的实例。通过 类名(...) 调用构造逻辑(常见为 __init__)得到具体实体。
语法:
python
对象名 = 类名(参数列表)示例:
python
class Dog:
species = "狗" # 类属性
def __init__(self, name, age):
self.name = name
self.age = age
a = Dog("Blu", 10)
b = Dog("Woo", 15)
print(f"A 是 {a.__class__.species}")
print(f"B 也是 {a.__class__.species}")
print(f"{a.name} 今年 {a.age} 岁")
print(f"{b.name} 今年 {b.age} 岁")输出:
text
A 是狗
B 也是狗
Blu 今年 10 岁
Woo 今年 15 岁抽象(abstraction)
抽象强调对外暴露必要接口、隐藏内部实现细节。在 Python 中常通过清晰的公开方法、模块/包划分、抽象基类(abc) 或约定(协议) 体现,而不是单一语法糖。
封装(encapsulation)
封装把数据与操作数据的方法绑在同一抽象边界内(典型即类)。Python 不强制私有成员,惯例用单下划线 _x、双下划线 __x(名称改写) 表达「不建议外部直接使用」,见 类与对象 与相关进阶资料。
继承(inheritance)
子类可以继承父类的属性与方法,并新增或重写行为,以提高复用性。详见 类的继承。
示例:
python
class Dog:
species = "哺乳动物"
def __init__(self, name, age):
self.name = name
self.age = age
def description(self):
return f"{self.name} 今年 {self.age} 岁"
def speak(self, sound):
return f"{self.name} 说:{sound}"
class Bulldog(Dog):
def run(self, speed):
return f"{self.name} 以 {speed} 奔跑"
jim = Bulldog("Jim", 12)
print(jim.description())
print(jim.run("慢速"))输出:
text
Jim 今年 12 岁
Jim 以 慢速 奔跑多态(polymorphism)
多态指同一操作(如同名方法、同一函数接口)作用于不同类型的对象时,表现出各自实现。Python 中常见鸭子类型:不强制继承同一父类,只要对象有对应方法即可。
更系统的说明见 多态。
示例:
python
class Rectangle:
def draw(self):
print("绘制矩形")
class Triangle:
def draw(self):
print("绘制三角形")
def draw_shape(shape):
shape.draw()
a = Rectangle()
b = Triangle()
draw_shape(a)
draw_shape(b)输出:
text
绘制矩形
绘制三角形小结
| 概念 | 要点 |
|---|---|
| 类 / 对象 | 类是模板,对象是实例 |
| 封装 | 数据与方法绑在一起,控制可见性靠约定与少量机制 |
| 抽象 | 暴露接口、隐藏细节 |
| 继承 | 基于父类扩展,注意 super() 与 MRO(多重继承) |
| 多态 | 同一接口,不同实现;Python 中鸭子类型很普遍 |