鱼C论坛

 找回密码
 立即注册
查看: 3408|回复: 3

关于魔法方法的不解之处

[复制链接]
发表于 2023-1-4 21:25:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我们知道魔法方法有__init__()用于初始化、__new__()用于定义不可改变的类型,这两个倒是不太难理解重载它们的意义。但是像算术运算:__add__(self,other)、__sub__(self,other)、__mul__(self,other)、__truediv__(self,other)。打印:__str__(self)、__repr__(self),属性操作:__getattr__(self, name)、__getattribute__(self, name)、__setattr__(self, name, value)、__delattr__(self, name)。描述符:__get__(self, instance, owner)、__set__(self, instance, value)、__delete__(self, instance)。定制序列:__len__(self)、__getitem__(self, key)、__setitem__(self, key, value)、__delitem__(self, key)。以及迭代器:__iter__(self)、__next__(self)。为什么要重载?重载的具体作用是什么?重载的意义又是什么?说实话我到现在也没弄明白。有没有哪位大佬告诉我一些实际的例子?非要重载这些魔法方法不可的例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-4 22:39:38 | 显示全部楼层
本帖最后由 jackz007 于 2023-1-4 22:42 编辑

          好奇葩的要求,非重载不可???要知道,别人只是给你留下了一个干预和改变特定操作行为结果的途径,你既可以使用,也可以不用,谁也不会强制你必须使用或不使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-4 22:46:04 From FishC Mobile | 显示全部楼层
哈哈,在我看来,__new__和__init__ 恰恰是比较难理解的,因为它涉及“对象是怎么诞生的”这一基本问题。 第二则是“属性操作”,“实例”(对象)有了,你具体怎么使用它所包含的属性(包括方法)呢?遵循怎样的机制呢?等等,就是这类特殊方法所定义的(你不定义它,即不“重载”它,它就默认用object或其他父类的这些方法)。。这个具体细节可以很复杂,也比较少用。。
“描述符”相对会用多些,你正确地定义了它(重载它),它就会按你的逻辑来做事。常常用在:实现 动态查找,属性托管等需求场景。
其他几类特殊方法比较好理解,自己查查,自己动手试试,就明白了。。(手机打字,我就懒得说了。。)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-4 22:49:22 From FishC Mobile | 显示全部楼层
哦哦,我跟着掉坑了吧——不是“重载”overload,是“重写”overwrite!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表