跳到主要内容

面向对象

Python 的面向对象模型兼顾简洁与强大。理解类、继承与魔术方法,能写出更地道的代码。

类与实例

类是对象的模板,实例是类的具象化。__init__ 在实例创建后立即调用,用于初始化。

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

继承与 MRO

子类继承父类属性与方法。多继承时,Python 使用 C3 线性化算法计算 MRO(方法解析顺序),可通过 ClassName.__mro__ 查看。

class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
D.__mro__ # (D, B, C, A, object)

super()

super() 按 MRO 查找父类方法,常用于 __init__ 中调用父类初始化,避免硬编码父类名。

魔术方法

以双下划线包裹的方法,在特定操作时自动被调用。

  • __str__:printstr() 调用,面向用户
  • __repr__:面向开发者,理想情况下可重建对象
  • __len__:支持 len(obj)
  • __getitem__:支持索引与切片

@property

将方法伪装成属性,可在访问时加入校验或计算逻辑,又不破坏接口。

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

@property
def name(self):
return self._name

dataclass

3.7+ 引入,自动生成 __init____repr____eq__ 等方法,显著减少样板代码。

from dataclasses import dataclass

@dataclass
class Point:
x: int
y: int

frozen=True 可生成不可变实例,等同于轻量级值对象。