Python 3.x 当不重写子类中的抽象方法时,不会引发异常
运行下面的代码时,我希望抛出一个异常,因为ChildPizza继承自BasePizza,但没有实现抽象方法get\u radius。但是程序运行时没有错误。为什么? 至少最后一行应该抛出一个异常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
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