20 分钟
Python 进阶

多态与魔术方法

理解多态,掌握常用魔术方法

  • 理解多态和鸭子类型
  • 常用魔术方法 __str__/__repr__/__len__
  • 运算符重载

多态:鸭子类型

Python不关心对象类型,只关心有没有这个方法。走起来像鸭子、叫起来像鸭子,就是鸭子。

示例代码(可运行)

常用魔术方法

示例代码(可运行)
💡常用魔术方法

__str__用户友好字符串,__repr__开发者字符串,__len__长度,__getitem__索引访问,__iter__迭代,__contains__ in运算。

预测输出
class C:
    def __str__(self): return "hello"
print(str(C()))
找 Bug__str__必须返回字符串,不能返回self。
class C: def __str__(self): return self
填空题填写空白处的代码
class C: def (self): return "C()" c = C() print(c) # C()
选择题

重载 + 运算符用哪个魔术方法?

选择题

面向开发者、强调无歧义、理想情况下可还原对象的魔术方法是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

内层函数(或 lambda)捕获的是外层变量本身,而不是定义那一刻的值;循环里定义的多个函数,循环结束后调用往往都拿到最后的值。解决办法是用默认参数 f(x=x) 立即绑定,或用工厂函数包一层。配合 LEGB 作用域顺序(局部→外层→全局→内建)理解,90% 的作用域谜题都能解开。

挑战任务

魔术方法挑战

简单+50 XP

实现Vector类支持加法和标量乘法。

魔术方法挑战
2 个测试用例

课后作业

自定义列表

中等+20 XP

实现MyList支持len和索引访问。

自定义列表
1 个测试用例