Python中下划线和双下划线有着特殊的用法。下面我们来详细讲解一下。
单下划线使用方法
在Python中,单下划线(单个前置下划线)的使用方法如下:
- 用于表示私有属性或方法,即想要让属性或方法在类外部不可被直接访问或调用,但是类内部可以被访问或调用。示例如下:
class Example:
def __init__(self):
self._secret = "This is a secret."
def get_secret(self):
return self._secret
ex = Example()
print(ex.get_secret()) # This is a secret.
print(ex._secret) # 'Example' object has no attribute '_secret'
在上面的代码中,我们在示例类Example中定义了一个名为”_secret”的属性,但是在类外部,我们通过对象名访问该属性时会出现AttributeError: ‘Example’ object has no attribute ‘_secret’这个错误信息,因为该属性已被定义为私有属性。
在类内部,我们通过类的方法get_secret()来访问_secret属性,在方法内部我们可以直接调用_self属性的值。
- 用在名称和变量名上来表示临时或无关的变量。示例如下:
for _ in range(5):
print("Hello, world!")
在上面的代码中,for循环中我们并不需要循环变量的值,而只是想执行循环体5次,因此我们用下划线代替了循环变量名。
双下划线使用方法
在Python中,双下划线(双个前置下划线)的使用方法如下:
- 用于名称修饰,使得名称成为私有名称,即该属性或方法在类外部和派生类中均不可访问。示例如下:
class Example:
def __init__(self):
self.__secret = "This is a secret."
def get_secret(self):
return self.__secret
ex = Example()
print(ex.get_secret()) # This is a secret.
print(ex._Example__secret) # This is a secret.
print(ex.__secret) # 'Example' object has no attribute '__secret'
在上面的代码中,我们在示例类Example中定义了一个名为”__secret”的属性,该属性被定义为私有属性。在类外部及其派生类中均不可被直接访问或调用,但是在类内部我们可以通过get_secret()方法来访问__secret属性。
由于Python对于双下划线命名方式进行了重命名,因此在类外部直接使用对象名访问__secret属性时会出现AttributeError: ‘Example’ object has no attribute ‘__secret’的错误信息。但是,我们可以通过”_类名__属性名”的方式来进行访问,如上例中的”_Example__secret”。
- 双下划线与单下划线组成前后缀字面量的特殊方法被Python保留。这些特殊方法,在Python中有着特定的含义。示例如下:
class Example:
def __init__(self, a, b):
self.a = a
self.b = b
def __add__(self, other):
return Example(self.a + other.a, self.b + other.b)
ex1 = Example(1, 2)
ex2 = Example(3, 4)
ex3 = ex1 + ex2
print(ex3.a, ex3.b) # 4 6
在上面的代码中,我们创建了一个名为Example的类,该类中定义了一个双下划线前后缀的特殊方法__add__(),用于重载加法运算符。在创建类的对象时,我们分别传入两个整数a、b。在__add__()中,我们返回了两个Example对象的a、b属性之和。