这可能是你的父类:
class Polygon():
def __init__(self):
raise NotImplementedError
def perimeter(self):
raise NotImplementedError
def area(self):
raise NotImplementedError
虽然问题会只有在子类的实例之一试图调用其中一种方法时才会在运行时发现。
不同的版本是使用abc.abstractmethod
。
from abc import ABCMeta, abstractmethod
import math
class Polygon(metaclass=ABCMeta):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def perimeter(self):
pass
@abstractmethod
def area(self):
pass
class Circle(Polygon):
def __init__(self, radius):
self.radius = radius
def perimeter(self):
return 2 * math.pi * self.radius
# def area(self):
# return 2 * math.pi * self.radius
c = Circle(9.0)
# TypeError: Can't instantiate abstract class Circle with abstract methods area
,你将不能够实例化一个Circle
,而无需实现的所有方法吧。
这是python 3
语法;在python 2
你需要
class Polygon(object):
__metaclass__ = ABCMeta
也注意到,对于二进制特殊功能__eq__(), __lt__(), __add__(), ...
这是为了更好地return NotImplemented
,而不是提高NotImplementedError
。