Python高级用法:名称修饰

前言

一般来讲,我们将仅可以在类中但不能被外部调用的变量或方法称为私有代码,在C++和Java中采用private关键字作为私有代码的标记。在本篇文章中将介绍python使用名称修饰方法区分私有代码的方式。

名称修饰(name mangling)

名词修饰的用法就是在一个属性前面加上__前缀,其实相当于是一种重命名方式。

假设我们创建了这样一个类,用名称修饰的方式创建一个变量:__secret_value

class MyClass:
    __secret_value = 1

如果我们直接调用

instance_of = MyClass()
print(instance_of.__secret_value)

产生报错如下

AttributeError: 'MyClass' object has no attribute '__secret_value'

但是这样的做法只是为了避免继承中的名称冲突。因为属性被重命名为以类名为前缀的名称,这并不是真正的锁定(real lock),也就是我们仍然可以通过加上类的前缀名的方式获取到变量。
获取变量方式如下

print(instance_of._MyClass__secret_value)

所以在实践中往往不使用__而是_来重命名,这样不会触发名称修饰的算法。
经过修改之后我们来查看一下类对象,发现确实不再存在和我们定义的对象相关的任何值了

class MyClass:
    _secret_value = 1


instance_of = MyClass()
print(dir(MyClass))

你可能感兴趣的:(python高级用法,python,开发语言)