7-5抽象方法不加@abstractmethod也可以正常重载(python2.7.10)
来源:7-5 如何让类支持比较操作

Brook_StudyMachine
2017-01-27
from functools import total_ordering @total_ordering class Shape(object): def area(): pass def __lt__(self,obj): print 'in __lt__' if not isinstance(obj,Shape): raise TypeError('obj is not Shape') return self.area() < obj.area() def __eq__(self,obj): print 'in __eq__' return self.area() == obj.area() class Rectangle(Shape): def __init__(self, w, h): self.w = w self.h = h def area(self): return self.w * self.h class Circle(Shape): def __init__(self, r): self.r = r def area(self): return self.r ** 2 * 3.14 r1 = Rectangle(5,3) r2 = Rectangle(4,4) c1 = Circle(3) print r1 < r2 #r1.__lt__(r2) print r1 == r2 print r1 < c1 # print r1 > 1
正常返回
True in __eq__ False in __lt__ True
引入ABCMeta和使用@abstractmethod是否还有必要吗?
写回答
1回答
-
非抽象类可以重载, 但实例抽象类对象会报错, 非抽象类不会.可以看成错误检查.
012017-02-03
相似问题