Python 面试题, 为什么 Python 不建议使用下划线开头的标识符?
Python 面试题, 为什么 Python 不建议使用下划线开头的标识符?
QA
Step 1
Q:: 为什么 Python 不建议使用下划线开头的标识符?
A:: 在Python中,以单下划线开头的标识符通常表示这是一个内部属性或方法,不希望在类的外部访问它。这是一种约定俗成的做法,而不是强制性的限制。以双下划线开头的标识符会触发名称改写(name mangling),使得其在子类中不容易被覆盖或直接访问。因此,使用下划线开头的标识符是为了表达这些属性或方法是类的内部实现细节,避免外部干扰或误用。
Step 2
Q:: Python 中的单下划线 _
有什么特殊含义?
A:: 单下划线 _
在Python中有多种用途。第一,它可以作为一个变量名表示不重要的值,比如在循环中不关心的变量。第二,在交互式解释器中,_
保存上一次表达式的结果。第三,在命名规范中,以单下划线开头的变量或方法通常被视为内部实现,不建议从外部访问。
Step 3
Q:: 什么是 Python 中的名字改写(Name Mangling)?
A:: 名字改写(Name Mangling)是一种避免属性名称在继承体系中冲突的技术。如果一个变量名以双下划线开头并且不以双下划线结尾,Python会自动将其重命名为 _类名__变量名
的形式。这种机制使得子类不能轻易地访问或覆盖父类中的此类变量,保护了类的封装性。
Step 4
Q:: 什么时候会用到名字改写机制?
A:: 名字改写通常在需要保护类的内部状态时使用,尤其是在设计类库时,希望防止外部或子类意外修改内部的实现细节。通过名字改写,开发者可以确保这些内部变量不会被意外访问或覆盖,从而提高代码的健壮性和安全性。
Step 5
Q:: 为什么需要区分内部和外部接口?
A:: 区分内部和外部接口有助于保持代码的模块化和可维护性。外部接口应该提供明确、稳定的API,供外部调用;而内部接口则可以灵活调整,以适应内部实现的变化。通过这种区分,可以避免外部依赖于内部实现细节,从而减少由于内部修改导致的代码破坏。