阐述什么标识符不建议使用下划线开头?

参考回答

在编程中,一般不建议使用以下划线开头的标识符(如 _variable)作为常规变量或函数名。下划线开头的标识符通常用于特殊用途,代表不同的编程约定。特别是以单个下划线 _ 开头的变量通常被认为是“受保护”的,即它们不应该被外部代码直接访问。以双下划线开头的标识符 __variable 则是用于实现类的名称重整(Name Mangling),以避免子类覆盖父类的私有属性。

详细讲解与拓展

  1. 单下划线 _ 开头:
    • 在 Python 中,单个下划线开头的变量名(例如 _variable)通常意味着该变量或方法是内部使用的,不应该被外部直接访问。这是约定俗成的规定,并没有强制执行。
    • 举例:假设我们有一个类 Person,其中有一个私有属性 _age。虽然在技术上我们仍然可以访问 _age,但使用它时应该注意,这是一个内部属性,不应该直接操作。
    class Person:
       def __init__(self, name, age):
           self._name = name
           self._age = age
    
    p = Person("Alice", 30)
    print(p._age)  # 可以访问,但不推荐
    
    Python
  2. 双下划线 __ 开头:
    • 双下划线开头的变量会触发 Python 的名称重整(Name Mangling)机制。Python 会将类中以双下划线开头的变量名修改为 _ClassName__variable,从而避免子类重写父类的私有属性。
    • 举例:如果类 Person 中有一个属性 __age,则它会被重命名为 _Person__age。这样即使子类定义了一个相同名字的属性,它不会覆盖父类的私有属性。
    class Person:
       def __init__(self, age):
           self.__age = age
    
    class Employee(Person):
       def __init__(self, age, salary):
           super().__init__(age)
           self.__age = salary  # 不会覆盖父类的__age
    
    p = Person(30)
    e = Employee(25, 50000)
    print(p.__dict__)  # 查看对象的内部属性,__age被重命名为_Person__age
    
    Python
  3. 总结:
    • 使用单下划线开头的标识符表示它是内部实现的一部分,尽量避免外部代码直接使用。
    • 双下划线则是为了避免子类覆盖父类的私有属性,提供一种机制来保护类的内部属性。
    • 除非有明确的目的,普通标识符不应使用下划线开头,以避免与这些特殊约定混淆。

发表评论

后才能评论