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
相似问题