这可能是您的父类:class Polygon():
def __init__(self):
raise NotImplementedError
def perimeter(self):
raise NotImplementedError
def area(self):
raise NotImplementedError
尽管只有在运行时才会发现问题,但当子类的一个实例尝试调用这些方法之一时。
另一个版本是使用^{}。from abc import ABCMeta, abstractmethod
# simpler alternative: from abc import ABC, abstractmethod
import math
class Polygon(metaclass=ABCMeta):
# simpler alternative: class Polygon(ABC)
@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 math.pi * self.radius**2
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__(), ...,最好是^{},而不是提升NotImplementedError。