哪理解python中的name mangling?

发布日期:2018-06-02 来源:财富国际在线 阅读:
哪理解python中的name mangling? 黄哥 3小时前 165 python python函数 python实例 初学python,官方文档写道:Name mangling is helpful for letting subclasses override methods without breaking intraclass method calls. 如何理解?求高手指点,文档给的示例代码:
0 0
其他回答
没必要想的那么复杂。

其实就是想让父类的__init__ method调用父类的update method,而不被子类override


问题是怎么做呢?

在父类的declaration中用另一个class variable:__update指向update method。由于这个赋值是在创造父类的时候(meta class)就会执行,所以__update 指向了父类的update。

That's all.
Jimmy Cheung 3小时前 0条评论
0 0

name mangling 这个是“名称改写”或翻译“名称修饰”
7OG财富国际


具体体现是:name mangling。__spam 形式的任何标识符(前面至少两个下划线,后面至多一个下划线)将被替换为_classname__spam,classname是当前类的名字。7OG财富国际


在 Python 中不存在只能从对象内部访问的“私有”实例变量。然而,有一项大多数 Python 代码都遵循的公约:带有下划线(例如_spam)前缀的名称应被视为非公开的 API 的一部分(无论是函数、 方法还是数据成员)。它应该被当做一个实现细节,将来如果有变化孰不另行通知。7OG财富国际

因为有一个合理的类私有成员的使用场景(即为了避免名称与子类定义的名称冲突),Python 对这种机制有简单的支持,叫做name mangling。__spam 形式的任何标识符(前面至少两个下划线,后面至多一个下划线)将被替换为_classname__spam,classname是当前类的名字。此mangling会生效而不考虑该标识符的句法位置,只要它出现在类的定义的范围内。7OG财富国际

Name mangling 有利于子类重写父类的方法而不会破坏类内部的方法调用。7OG财富国际


上面那个例子7OG财富国际

你可以这样解读7OG财富国际


父类Mapping 如果没有 __update = update 这句7OG财富国际

同时父类Mapping __init__ 方法中用self.update(iterable)。7OG财富国际


子类MappingSubclass 7OG财富国际


没有定义自己的__init__方法,子类就继承了父类的这个方法。
当你实例化子类的时候,继承父类的__init__方法,此时子类MappingSubclass 中又一个update方法和父类__init__中调用的update方法有冲突。

所以才有这个
__update = update
黄哥 3小时前 0条评论
0 0

关于我们 联系我们招聘信息免责申明广告服务 网站地图 百度地图 TAG标签

Copyright@2018-2022 Cfgjzx.Com 财富国际在线 版权所有 All Rights Reserved   
财富国际提供:最新财富资讯、房产资讯、股票资讯、区块链、投资理财、保险导购、健康产品、公私募基金,易经等资讯及服务.