详解Python 下划线、双下划线的涵义

  • Post category:Python

下划线和双下划线在Python中有着特殊的含义,通常用来表示私有属性和方法。下面我将详细讲解各种情况下下划线和双下划线的使用方法。

单个下划线

单个下划线通常用来表示私有属性或方法,即只能在类内部使用的属性或方法。因为没有真正的私有属性或方法,所以在Python中使用单个下划线只是一个惯例,不是强制性的规定。当然,如果一个属性或方法使用了单个下划线,那么在类外部使用时也是可以访问的,只不过这不是一个良好的习惯。

示例代码:

class MyClass:
    def __init__(self, num1, num2):
        self._num1 = num1
        self._num2 = num2

    def _add(self):
        return self._num1 + self._num2

my_class = MyClass(3, 4)
print(my_class._add())  # 输出 7

在这个示例代码中,我们定义了一个类 MyClass,并使用单个下划线来定义了一个私有方法 _add 和两个私有属性 _num1_num2。虽然在类外部我们也可以通过 my_class._add() 访问到这个方法,但是这不是一种良好的编程习惯。

双下划线

双下划线通常用于类中的名称重整,这种方式被称为Name Mangling(名称重整)。具体来说,当一个属性或方法前面有双下划线时,Python会自动将它重命名为 _类名__变量名 或者 _类名__方法名 的形式。

示例代码:

class MyClass:
    def __init__(self, name):
        self.__name = name

    def __change_name(self, new_name):
        self.__name = new_name
        return self.__name

my_class = MyClass('Tom')
print(my_class._MyClass__name)  # 输出 'Tom'
print(my_class._MyClass__change_name('Jerry'))  # 输出 'Jerry'

在这个示例代码中,我们定义了一个类 MyClass,并使用双下划线来定义了一个私有属性 __name 和私有方法 __change_name。在调用时,我们可以通过 _MyClass__name 来访问私有属性,通过 _MyClass__change_name('Jerry') 来访问私有方法。这种方式不推荐使用,因为不利于代码的阅读和维护。