使抽象方法定义在实例化时成为必需的Python基类

2024-04-26 14:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基类,它定义了几个空方法。我想强制/强制子类中这些方法的定义,并在初始化时使其崩溃,以防它们没有被重写。在

例如:

class Shape:
    def __init__(self, name):
        self.name = name
    def number_of_edges(self):
        pass  # method HAS TO be overloaded in subclass

class Triangle(Shape):
    def __init__(self, name):
        super(Triangle, self).__init__()

    def number_of_edges(self):
        return 3

似乎Python的方法是引发一个NotImplementedError

^{pr2}$

但是在类实例化过程中,尽早崩溃并检测到实现的缺乏可能是有益的。为什么这不是默认值,它能做到吗?在


Tags: of方法nameselfnumber定义initdef
2条回答

使用^{} module创建抽象基类。在

import abc

class Shape(object):
    __metaclass__ = abc.ABCMeta

    def __init__(self, name):
        self.name = name

    @abc.abstractmethod
    def number_of_edges(self):
        pass

任何用^{} decorator修饰的方法都将触发TypeError异常:

^{pr2}$

你可以使用Abstract基类

import abc
class Shape:
    __metaclass__ = abc.ABCMeta   

    def __init__(self, name):
        self.name = name

    @abc.abstractmethod
    def number_of_edges(self):
        pass  # method HAS TO be overloaded in subclass

现在,如果Triangle类不重写number_of_edges方法,它将引发异常。在

相关问题 更多 >