Python 里大多数类其实本该写成函数。判断标准不是“这是不是名词”,而是有没有一种非法状态需要类来阻止。
14 9 月
没有 __repr__ 的类,从写出来那天起就在浪费你的时间。repr 给你自己看,str 给读者看,而两者中只有一个有像样的回退。
14 9 月
Python 用不着 getter 和 setter,因为 @property 让你以后再加校验时,一个调用方都不用改。
14 9 月
该用哪种方法,只取决于方法需要什么:当前实例、类,还是都不需要。选错了,子类会悄无声息地出问题。
14 9 月
Python 有四种存放结构化数据的方式。选哪种不是风格问题,关键在于:拼错一个名字时,你希望程序立刻报错吗?
14 9 月
asdict() 把数据类(dataclass)转成字典,一路递归到底,边走边拷贝。多数时候你要的正是这样,偶尔却完全不是。
14 9 月
鸭子类型要到调用时才报错,那时离犯错的地方已经很远。抽象基类和 Protocol 都能解决这个问题,只是方向正好相反。
14 9 月
__slots__ 去掉了每个实例自带的字典。对象一多,能省下实实在在的内存,还顺带拦住拼写错误,但不适合当默认选择。