您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

例如,一个Container必须 重写特殊方法__contains__,即成员资格检查运算符item in container(例如,if item in container:-不要与依赖于!-的for语句混淆)。同样,必须重写,一个必须重写,一个一个必须重写,等等。(此外,ABC可以为您的班级提供混合功能- 例如,同时提供这两种功能,并可以在您提供的替代项的基础上提供,从而自动将您的班级设置为a )。for item in container:``__iter__``Hashable``__hash__``Sized``__len__``Sequence``Mapping``__getitem__``Sequence``Mapping``__contains__``__getitem__``Container

除了之外collections,大多数情况下,如果您的新类“是数字”,您将要覆盖特殊方法(即,提供操作符重载)。还存在其他特殊情况,但是可以抵制重载运算符“仅出于冷静”的诱惑,而没有“正常”含义的语义联系,就像C ++的流为<<>>和Python字符串所做的一样(2.*幸运的是,在Python中不再存在3.*;-)做到了%—当这样的运算符不再意味着“移位”或“除法余数”时,您只会引起混乱。语言的标准库可以摆脱它(尽管不应该;-),但是除非您的库像该语言的标准库一样普及,否则混淆会很麻烦!-)

python 2022/1/1 18:26:24 有178人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶