ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一篇文章搞懂python的三种魔术方法、私有方法、名称改写下划线设计

一篇文章搞懂python的三种魔术方法、私有方法、名称改写下划线设计 前后双下划线__xxx__→ 叫魔术方法Magic Method / 特殊方法像你代码里的__iter__、__next__还有平时见到的__init__、__str__都是这一类。为什么要前后都加双下划线这是Python官方约定的特殊命名格式目的区分普通方法普通方法我们自己写比如get_name()没有双下划线__iter__()这种是Python内置预留名字属于语言本身规定好的钩子函数。意思就是这个方法不是让你手动直接调用而是Python解释器在特定场景自动调用举个对照myiteriter(myclass)# 等价于 myclass.__iter__()next(myiter)# 等价于 myiter.__next__()你写iter()、next()解释器自动去找对应的__iter__、__next__。三种下划线命名一次性分清小白必记①__xxx__前后双下划线魔术方法系统预留名字不要自己随便创建新的__abc__这种名字防止和Python未来新增的内置方法冲突。由解释器自动调用。 例子__init__构造方法、__iter__、__next__、__str__、__len__②_xxx单下划线开头约定私有只是约定俗成告诉其他开发者这是内部变量/方法尽量不要在类外面直接访问。语法上仍然能访问只是一个提示。③__xxx双下划线开头末尾没有下划线名称改写name manglingPython会自动改名用来避免子类重名冲突不是严格私有。classA:def__func(self):pass# 实际变成 _A__func迭代器的例子def__iter__(self):def__next__(self):Python规定想让这个类支持iter()、next()就必须实现名字刚好叫__iter__和__next__的魔术方法。 名字不能随便改写成iter_()或者_iter_()都不行解释器识别不到。一句话总结前后双下划线是Python预留的特殊标记代表这是语言内置钩子函数由解释器自动调用不是普通自定义方法。要不要我给你列一份最常用的魔术方法清单附带触发场景
返回列表