Python v3.7.0
方案一(推荐):定义抽象基类,只要把一个方法定义成抽象方法,那解释器就会要求子类必须重写这个方法,要注意的是,如果抽象方法没有被重写,那么子类在实例化时,就会抛出TypeError异常,而不需要等到调用函数。
import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self):
pass
class Dog(Animal):
def run(self):
pass
if __name__ == '__main__':
dog = Dog()
运行以上代码,会抛出异常:
TypeError: Can't instantiate abstract class Dog with abstract methods speak
只有在Dog子类中,重写speak方法,才可以正常实例化子类。
方案二:指定父类方法抛出NotImplementedError异常
class Animal1():
def speak(self):
raise NotImplementedError
class Dog1(Animal1):
def run(self):
pass
if __name__ == '__main__':
dog = Dog1()
dog.speak()
子