面向对象
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__:print与str()调用,面向用户__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 可生成不可变实例,等同于轻量级值对象。