当您创建属于现有“抽象基类”(ABC)的新类时,运算符重载最有用-
实际上,标准库模块集合中的许多ABC都依赖于某些特殊方法(和特殊方法)的存在。方法(一种名称以双下划线AKA“
dunders”开头和结尾)正是您在Python中执行运算符重载的方式)。这提供了良好的入门指导。
例如,一个
Container类 必须 重写特殊方法
__contains__,即成员资格检查运算符
item incontainer(例如,
if item incontainer:-不要与依赖于!-的
for语句混淆)。同样,必须重写,一个必须重写,一个或一个必须重写,等等。(此外,ABC可以为您的班级提供混合功能-
例如,同时提供这两种功能,并可以在您提供的替代项的基础上提供,从而自动将您的班级设置为a )。
for item incontainer:``__iter__``Hashable``__hash__``Sized``__len__``Sequence``Mapping``__getitem__``Sequence``Mapping``__contains__``__getitem__``Container
除了之外
collections,大多数情况下,如果您的新类“是数字”,您将要覆盖特殊方法(即,提供 *** 作符重载)。还存在其他特殊情况,但是可以抵制重载运算符“仅出于冷静”的诱惑,而没有“正常”含义的语义联系,就像C
++的流为
<<和
>>和Python字符串所做的一样(
2.*幸运的是,在Python中不再存在
3.*;-)做到了
%—当这样的运算符不再意味着“移位”或“除法余数”时,您只会引起混乱。语言的标准库可以摆脱它(尽管不应该;-),但是除非您的库像该语言的标准库一样普及,否则混淆会很麻烦!-)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)