前言

Python 里到处都是双下划线:__name__、__init__、__all__、__getattr__……刚学的时候只知道 if __name__ == '__main__' 这么抄,不清楚背后的整套设计。这篇把双下划线家族(俗称 dunder,double underscore 的缩写)按用途全面整理一遍,每个都带小样例,有版本要求的标明版本。

先给个总原则(PEP 8 的原话):__xxx__ 这种前后双下划线的命名权属于 Python 解释器,自己写类不要发明这种名字,想表达内部属性用单下划线 _foo 或者双下划线前缀 __foo(后面讲它的改写机制)。

……

阅读全文