1.1 一摞python风格的纸牌
类的定义&双下划线特殊方法:
- 特殊方法的使用:
- 特殊方法是由Python解释器调用的, 自己并不需要调用他们。不存在my_object.__len__()这种写法,而应该使用(len(my_object))。如果my_object是一个自己定义的类对象, 那么python会自己调用由你实现的__len__方法。
- 如果是python内置类型,如list, str等,Cpython会抄近路, __len__会直接返回PyVarObject里的ob_size属性。 PyVarObject是表示内存中长度可变的内置对象的C语言结构体,直接读取这个数会更快。
- 特殊方法的调用可以是隐式的。如for i in x: 实际上调用的是iter(x),背后是x.__iter__()方法