Python 3.x 当不重写子类中的抽象方法时,不会引发异常

Python 3.x 当不重写子类中的抽象方法时,不会引发异常,python-3.x,abstract-class,Python 3.x,Abstract Class,运行下面的代码时,我希望抛出一个异常,因为ChildPizza继承自BasePizza,但没有实现抽象方法get\u radius。但是程序运行时没有错误。为什么? 至少最后一行应该抛出一个异常 from abc import ABCMeta, abstractmethod class BasePizza(object): __metaclass__ = ABCMeta @abstractmethod def get_radius(self): ra

运行下面的代码时,我希望抛出一个异常,因为ChildPizza继承自BasePizza,但没有实现抽象方法get\u radius。但是程序运行时没有错误。为什么?

至少最后一行应该抛出一个异常

from abc import ABCMeta, abstractmethod

class BasePizza(object):
    __metaclass__  = ABCMeta

    @abstractmethod
    def get_radius(self):
        raise NotImplementedError( "implement me in child class" )

class ChildPizza(BasePizza):
    pass

myChildPizza = ChildPizza() 
myBasePizza = BasePizza() 

Python3没有使用
\uuuuuuuuuuuuuuuuuuuuuu元类
类属性,因此实际上没有定义抽象基类。相反,您可以为类定义指定一个关键字“argument”

class BasePizza(metaclass=ABCMeta):
    @abstractmethod
    def get_radius(self):
        pass
您还可以简单地将
abc.abc
子类化,该子类预定义为使用
ABCMeta
作为其元类

class BasePizza(ABC):
    @abstractmethod
    def get_radius(self):
        pass

Python3没有使用
\uuuuuuuuuuuuuuuuuuuuuu元类
类属性,因此实际上没有定义抽象基类。相反,您可以为类定义指定一个关键字“argument”

class BasePizza(metaclass=ABCMeta):
    @abstractmethod
    def get_radius(self):
        pass
您还可以简单地将
abc.abc
子类化,该子类预定义为使用
ABCMeta
作为其元类

class BasePizza(ABC):
    @abstractmethod
    def get_radius(self):
        pass