答案很简单:使用一个前导下划线,除非你有一个 真正 令人信服的理由不这样做(甚至再三思而后行)。
长答案:
下划线表示“这是一个实现细节”(属性,方法,函数等),在Python中与Java中的“ protected”等效。对于不属于类/模块/包公共API的名称,应使用此名称。这只是一个命名约定(通常- 星号导入将忽略它们,但是您不是在Python外壳中进行星号导入吗?)因此它不会阻止任何人访问此名称,但随后它们会如果出现任何问题,请自行承担责任(请参阅“未密封的保修无效”之类的提法)。
两个下划线会触发名称处理机制。很少有使用此功能的正当理由-实际上,我能想到的只有一个(并有记录):保护一个名称,以免在复杂框架的内部环境中被 覆盖。例如,在整个django代码库(主要在django.utils.functional软件包中)中,大约有六打或更少的这种命名方案实例。
就我而言,我必须在15年以上的时间里使用此功能三次,即使这样,我仍然不确定我是否真的需要它。