Python笔记 · 私有方法、私有属性 单下划线、双下划线
创始人
2024-03-05 15:28:04
0

首先,不同于其他编程语言,Python中不存在真正意义上的“私有方法/属性”,Python中所胃的“私有方法”要么基于约定,要么基于编译期的改写(Name Mangling)。与私有方法、私有属性密切相关的是单下划线、双下划线。下面详细解释一下:

1. _*

以前置单下划线开始的方法名或属性名,这仅仅是一种形式上约定的私有方法或属性,在语法上无人任何约束性,人们仅仅是通过这种命名规范告知读者:这个方法或属性在定位上是私有的,不应在对像以外的地方使用。所以实际上,如果你想,还是可以在对像以外的地方调用或读写它们。以下是一段测试代码,用于验证该类方法或属性的可见性:

class A(object):def __init__(self):self._private=0def _private_method(self):print('AAAAA')       
>>>a=A()
>>>a._private #可直接访问
0
>>>a._private_method() #可直接访问
AAAAA

2. __*

以前置双下划线开始的方法名或属性名,仍旧是用于标识私有方法或属性的,但较之于_*有了一些“实质性的”变化,那就是你确实无法“直接”在对像以外的地方调用或读写它们了,这是因为:Python使用了Name Mangling技术,在编译时将__membername改写成了 _classname__membername,即:以双下划线开始的方法或属性都被"转义"成为单下划线+类名+双下划线+成员名的形式。所以,在知晓了转换规则后,你依然可以在对象外部以转义后的名称调用或读写它们。以下是一段测试代码,用于验证该类方法或属性的可见性:

class A(object):def __init__(self):self.__private=0def __private_method(self):print('AAAAA')
>>>a=A()
>>>a.__private # 直接调用,不可见
Traceback (most recent call last):File "", line 1, in 
AttributeError: 'A' object has no attribute '__private'
>>>a.__private_method() # 直接调用,不可见
Traceback (most recent call last):File "", line 1, in 
AttributeError: 'A' object has no attribute '__private_method'
>>>a._A__private # 改为编译器改写后的真实属性名后,可见
0
>>>a._A__private_method() # 改为编译器改写后的真实方法名后,可见
AAAAA

不过,在《Fluent Python》一书中,作者引用Ian Bicking 的一句话用于表达对__*即Name Mangling的态度:

绝对不要使用两个前导下划线,这是很烦人的自私行为。如果担心名称冲突,应该明确使用一种名称改写方式(如
_MyThing_blahblah)。这其实与使用双下划线一样,不过自己定的规则比双下划线易于理解。

即:慎用最好不用__*形式的私有方法或属性,这不是个好习惯。

3. __*__

以前置双下划线开始,后置双下划线结束的方法名,这已经和私有方法或属性无关了,这是Python语言系统定义的一些特殊函数,称之为:魔法函数 / Magic Methods / Dunder Methods, 我们将在另外一篇文章中单独介绍。


参考:

https://blog.csdn.net/sxingming/article/details/52875125

https://segmentfault.com/a/1190000040064040

相关内容

热门资讯

海南产经新观察:为“向数图强”... 中新网海口12月23日电 (黄方舟)已经启动全岛封关的海南自贸港,正致力推动公共数据资源开发利用,加...
幼儿园收费划出“制度红线”,严... 大象新闻2025-12-23 17:12:18 2026年1月1日起,幼儿园收费实行目录清单管理,建...
快手就遭到黑灰产攻击谴责违法犯... 针对快手平台上出现违规内容的异常情况,12月23日,南都N视频记者从快手科技方面获悉,公司快手应用的...
调解故事 | 高效化解装修纠纷... 近日,延吉市房地产纠纷人民调解委员会成功调解了一起合同纠纷,切实维护了当事人合法权益。 今年5月,...
宁波女婴医疗纠纷进入司法程序 ... 央广网宁波12月23日消息(记者陈金莲 俞烨)12月23日,记者从宁波市海曙区人民法院了解到,该院已...
被举报打赏网红600余万,国企... 张女士系中国某工程咨询集团有限公司职员,其名下实名手机号注册的抖音账号“xx阳光”在不到两年的时间里...
涉房屋租赁合同纠纷案情:不适租... 租赁企业提供的房屋不适租,承租方有权单方解除合同并主张违约责任。 12月23日,北京第三中级人民法院...
农银人寿广西分公司开展普法宣讲... 为深入贯彻落实宪法宣传教育工作要求,切实增强员工法律意识与风险防范能力,帮助员工妥善化解工作、生活中...
重大毒品犯罪案件证据收集审查判... 重大毒品犯罪案件证据收集审查判断工作指引(浙江省) (浙检发诉三字〔2015〕1号) 来源:为你辩护...
知名拆迁律师联系方式揭秘:为您... 在拆迁过程中,遇到纠纷和难题是常有的事,这时候找一位有名的拆迁律师至关重要。那么,如何获取资深拆迁律...