Python 进阶
多态与魔术方法
理解多态,掌握常用魔术方法
- 理解多态和鸭子类型
- 常用魔术方法 __str__/__repr__/__len__
- 运算符重载
多态:鸭子类型
Python不关心对象类型,只关心有没有这个方法。走起来像鸭子、叫起来像鸭子,就是鸭子。
示例代码(可运行)
Python 0%
常用魔术方法
示例代码(可运行)
Python 0%
💡常用魔术方法
__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类支持加法和标量乘法。
魔术方法挑战
Python 0%
2 个测试用例
课后作业
自定义列表
中等+20 XP
实现MyList支持len和索引访问。
自定义列表
Python 0%
1 个测试用例