在 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。
需要注意的是,名称修饰并不是一种安全机制,它只是一种约定俗成的编程习惯。如果真的想要访问被修饰的属性或方法,仍然可以通过改变名称来绕过修饰的限制。
在 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。
需要注意的是,名称修饰并不是一种安全机制,它只是一种约定俗成的编程习惯。如果真的想要访问被修饰的属性或方法,仍然可以通过改变名称来绕过修饰的限制。
本文地址:
/show-274694.html
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。