Python 中的双下划线,它们在语言中扮演什么神秘角色?

Python中,双下划线__)具有特殊的含义,以下是一些常见的用法:

1. 私有变量和方法

Python 中的双下划线,它们在语言中扮演什么神秘角色?插图1
(图片来源网络,侵删)

在Python中,以双下划线开头的变量或方法被视为“私有”,这意味着它们不能从类的外部直接访问,这是一种封装的方式,用于隐藏类的内部实现细节。

class MyClass:
    def __init__(self):
        self.__private_variable = 42
    def __private_method(self):
        print("This is a private method")
创建对象并尝试访问私有成员
obj = MyClass()
obj.__private_variable  # 这将引发AttributeError
obj.__private_method()   # 这也将引发AttributeError

2. 名称修饰(Name Mangling)

虽然双下划线前缀确实使变量和方法成为私有的,但它们并不是完全无法访问的,Python解释器会对这种名称进行修饰,以防止意外访问,它会在私有名称前加上_类名

class MyClass:
    def __init__(self):
        self.__private_variable = 42
obj = MyClass()
print(obj._MyClass__private_variable)  # 输出: 42

3. 魔术方法(Magic Methods)

双下划线还用于定义所谓的魔术方法,这些方法在特定情况下会被Python自动调用。__init__是一个构造函数,当创建一个新的对象时会自动调用它。

Python 中的双下划线,它们在语言中扮演什么神秘角色?插图3
(图片来源网络,侵删)
class MyClass:
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return f"MyClass instance with value {self.value}"
obj = MyClass(10)
print(obj)  # 输出: MyClass instance with value 10

4. 属性访问器(Property Accessors)

双下划线还可以用于定义属性访问器,即getter和setter方法,这些方法允许你在获取或设置属性值时执行额外的操作。

class MyClass:
    def __init__(self, value):
        self.__value = value
    @property
    def value(self):
        print("Getting value")
        return self.__value
    @value.setter
    def value(self, new_value):
        print("Setting value")
        self.__value = new_value
obj = MyClass(5)
print(obj.value)  # 输出: Getting value, 5
obj.value = 10     # 输出: Setting value

尽管双下划线可以用于定义私有成员,但它们并不提供真正的数据隐藏,Python的设计哲学是“我们都是成年人”,意味着程序员应该对自己的代码负责,而不是依赖语言特性来强制实施封装。

Python 中的双下划线,它们在语言中扮演什么神秘角色?插图5
(图片来源网络,侵删)

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/60254.html

小末小末
上一篇 2024年9月25日 23:56
下一篇 2024年9月26日 00:03

相关推荐