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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾醒(AiXing-w)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值