gpt4 book ai didi

python - 何时在 python 中使用运算符重载的经验法则

转载 作者:太空狗 更新时间:2023-10-29 17:21:27 25 4
gpt4 key购买 nike

据我记得在我的 C++ 课上,教授说运算符重载很酷,但是因为它需要相对大量的思考和代码来涵盖所有最终情况(例如重载 +你可能还想重载 +++=,并确保处理最终情况,比如将对象添加到自身等),你应该只考虑它此功能会对您的代码产生重大影响的情况,例如在数学应用程序中重载矩阵类的运算符。

同样适用于 python 吗?你会推荐在 python 中重写运算符行为吗?你能给我什么经验法则?

最佳答案

当您创建一个属于现有“抽象基类”(ABC) 的新类时,运算符重载最有用——实际上,标准库模块中的许多 ABC collections依赖于某些特殊方法的存在(以及特殊方法,名称以双下划线开头和结尾的 AKA“dunders”,正是您在 Python 中执行运算符重载的方式)。这提供了良好的入门指导。

例如,Container必须重写特殊方法__contains__ ,即成员资格检查运算符 item in container (如 if item in container:——不要与 for 语句混淆,for item in container: 依赖于 __iter__ !-)。同样,一个 Hashable必须覆盖 __hash__ , 一个 Sized必须覆盖 __len__ , 一个 SequenceMapping必须覆盖 __getitem__ ,等等。 (此外,ABC 可以为您的类(class)提供混合功能——例如,SequenceMapping 都可以在您提供的 __contains__ 覆盖的基础上提供 __getitem__,从而自动使您的类(class)成为 Container ).

超越collections ,如果你的新类“是一个数字”,你会想要覆盖特殊方法(即提供运算符重载)。存在其他特殊情况,但要抵制重载运算符的诱惑,“只是为了酷”,与“正常”含义没有语义联系,就像 C++ 的流对 << 所做的那样。和 >>和 Python 字符串(在 Python 中 2.* ,幸运的是不再在 3.* 中;-)为 % 做-- 当此类运算符不再表示“位移位”或“除法余数”时,您只会造成混淆。一种语言的标准库可以摆脱它(虽然它不应该;-),但除非你的库像语言的标准库一样广泛,否则混淆会很痛苦!-)

关于python - 何时在 python 中使用运算符重载的经验法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1552260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com