在Python中,以下划线 (_) 开头的属性和方法通常被视为内部使用或私有的。而以双下划线 (__)开头并且不以双下划线结尾的属性和方法叫做“名称修饰(name mangling)”。
-
以单下划线 (_) 开头的属性和方法: 这种命名约定暗示着某个属性或方法是用于内部使用的,但它们并没有强制限制外部访问。这仅仅是一种约定,用来给其他程序员传达关于该属性或方法的使用意图。
-
以双下划线 (__)开头并且不以双下划线结尾的属性和方法: 这种命名约定用于名称修饰,将属性或方法重命名为"_类名__属性名"或"_类名__方法名"的形式。这是Python的一种名称重整机制,旨在避免子类意外覆盖父类的属性或方法。这种重命名机制使得属性或方法变得更加唯一,即使在多层继承中也能保持独立性。需要注意的是,这种名称修饰只在类的定义内部起作用,外部无法直接访问。
下面是一个示例,演示了这两种命名约定的用法:
class MyClass:def __init__(self):self._internal_var = "Internal Variable"self.__private_var = "Private Variable"def _internal_method(self):print("This is an internal method.")def __private_method(self):print("This is a private method.")def public_method(self):print("This is a public method.")self._internal_method()self.__private_method()# 创建对象并访问属性和调用方法
obj = MyClass()
print(obj._internal_var) # 输出: Internal Variable
# print(obj.__private_var) # 报错,无法直接访问
obj.public_method() # 输出: This is a public method.# This is an internal method.# This is a private method.
Internal Variable
This is a public method.
This is an internal method.
This is a private method.
在上述示例中,我们定义了一个名为 MyClass
的类。该类包含一个以单下划线 (_) 开头的属性 _internal_var
,和一个以单下划线 () 开头的方法 _internal_method
。此外,还有一个以双下划线 (__)开头的属性 __private_var
和方法 __private_method
。通过对象访问 _internal_var
属性和 public_method
方法没有问题,而直接访问 __private_var
属性会导致错误。最后,调用 public_method
方法时,内部方法 _internal_method
和私有方法 __private_method
也被执行。
需要注意的是,尽管使用命名约定可以限制对内部属性和方法的访问,但它们并不是Python语言级别的强制限制,而是一种约定。在某些情况下,仍然可以通过强制访问来获取或修改这些内部属性和方法。