下划线和双下划线在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')
来访问私有方法。这种方式不推荐使用,因为不利于代码的阅读和维护。