{site_name}

{site_name}

🌜 搜索

在 Python 中,使用双下划线(__)来定义类属性或方法时,Python 会

Python 𝄐 0
在python中,在python函数中,用于获取用户输入的,在python中strip,在python中我们通常用什么来存取数值,在python中split,在python中的用法
在 Python 中,使用双下划线(__)来定义类属性或方法时,Python 会对其进行名称修饰(Name Mangling),将其变为一个带有类名前缀的新名称,以防止与其他类中的同名属性或方法发生冲突。

例如,假设有以下代码:


class MyClass:
def __init__(self):
self.__spam = 42

obj = MyClass()
print(obj.__spam)


当尝试访问obj.__spam时,Python 解释器会把属性名 __spam 转换为 _MyClass__spam,因此会引发 AttributeError 错误。因为 __spam 已经被 Python 解释器修改为 _MyClass__spam,所以在外部无法直接访问该属性。

如果我们想在类的外部访问这个属性,可以通过 _MyClass__spam 的方式进行访问,如下所示:


class MyClass:
def __init__(self):
self.__spam = 42

obj = MyClass()
print(obj._MyClass__spam)


输出结果为 42。

需要注意的是,名称修饰并不是一种安全机制,它只是一种约定俗成的编程习惯。如果真的想要访问被修饰的属性或方法,仍然可以通过改变名称来绕过修饰的限制。