在python中,单下划线和双下划线前缀在变量和方法命名中都有特殊的含义,他们被用来指定变量,方法和属性的访问权限以及避免命名冲突。这些约定并不是语言强制的规则
单下划线
- 作为临时变量:在循环或解包时,用作临时或者不重要的变量。例如“for _ in range(0.100)”或者x,_,y = (1,2,3)
- 轻度私有指示器:以单下划线开头的变量或者方法(如_variable,_method(self))视为内部实现的一部分,不应该被外部访问。这只是一个预定,Python并不会组织外部访问这样的变量或者方法
- 在模块导入时使用:当从一个模块中导入*时,以但下划线开头的变量或者方法默认不会被导入,表示他们时模块内部使用的。
双下划线
- 名称改写:以双下划线开头的变量或者方法(比如__variable,__method(self))会触发python的名称改写机制。Python解释器会将这些名称改写为“_ClassName__variable”的形式从而在继承链中避免命名冲突。这使得变量或者方法像是变得私有的,这虽然这种私有是通过名臣更改写实现的,技术上任然可以i从外部访问他们,但是不推荐这么做
- 特殊方法:python中有一类特殊用途的方法,这些方法以双下划线开始和技术(如__init__(slef,)call,)这些特殊方法提供了类的构造函数等其他特性。这种用法是被python语言和其标准库识别的,不属于名称改写
区别和应用场景
- 但下划线主要用于指示变量或方法仅共内部使用。他们并不真正组织外部的访问,而是作为以中约定来表示
- 双下划线:主要用于在类中避免子类重写服了ide方法,或者为了避免于子类中的命名冲突而自动改写名称。双下划线不应用于特殊方法之外的场景除非你明确需要利用抿成改写的行为。