Python中双下划线前缀有什么用途?
在Python中,双下划线前缀 “__” 是一种特殊的命名方式,用来表示私有属性或方法。那么,什么是私有属性或方法呢?私有属性或方法是指只能在类内部被访问的属性或方法,无法在类的外部被直接访问。
阅读更多:Python 教程
私有属性的定义
在Python中,如果一个属性的名字以双下划线 “__” 开头,则该属性为私有属性,无法从类的外部直接访问。
下面是一个私有属性的示例代码:
class MyClass:
def __init__(self, value):
self.__value = value
my_instance = MyClass(10)
# 属性名为 __value,在类外部无法直接访问,下行代码会报错
print(my_instance.__value)
以上代码中,我们创建了名为 MyClass 的类,并在其中定义了一个名为 init 的构造函数。在构造函数中,我们定义了一个名为 __value 的私有属性,并将其初始化为传入的参数 value。
随后,我们创建了一个 MyClass 的实例 my_instance,并尝试在类外部直接访问实例的属性 __value。由于该属性为私有属性,所以下行代码会报错。
私有属性的访问
虽然无法直接从类的外部访问私有属性,但是Python提供了一种特殊的访问方式,即使用双下划线前缀加上类名,在类的内部访问私有属性。
下面是一个私有属性访问的示例代码:
class MyClass:
def __init__(self, value):
self.__value = value
def print_value(self):
print(self.__value)
my_instance = MyClass(10)
my_instance.print_value()
在以上代码中,我们定义了 MyClass 类,并在其中新增了一个名为 print_value 的方法。该方法可以访问该类实例的私有属性 __value,并将其打印出来。
由于我们在类内部定义了该方法,所以在调用时可以成功访问私有属性,并打印出其值。
私有方法的定义
类似于私有属性,在Python中也可以定义私有方法。如果一个方法的名字以双下划线 “__” 开头,则该方法为私有方法,无法从类的外部直接访问。
下面是一个私有方法的示例代码:
class MyClass:
def __init__(self, value):
self.__value = value
def __print_value(self):
print(self.__value)
def print_value(self):
self.__print_value()
my_instance = MyClass(10)
my_instance.print_value()
以上代码中,我们在 MyClass 类中定义了一个名为 __print_value
的私有方法,该方法可以打印该类实例的私有属性 __value
。
为了在类的外部调用该方法,我们新增了一个名为 print_value 的公有方法,并在其中调用 __print_value
方法。这样,在类的外部我们就可以通过 print_value 方法访问 MyClass 实例的 __value
私有属性,并打印出其值。
总结
在Python中,使用双下划线前缀可以定义私有属性或方法,使其无法在类的外部被直接访问。但是,仍然可以通过特殊的访问方式,在类的内部访问该属性或方法。私有属性和方法的定义可以增强代码的封装性和安全性,使得外部代码无法乱改内部状态,提高代码的可靠性。