基类应该包含伪定义或占位符定义,为什么?

2024-10-02 12:30:11 发布

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

让我用下面这个简单的例子来解释我所说的“虚拟/占位符定义”是什么意思。不知道该怎么称呼他们。在

class GateBase:
    def __init__(self):
        self.inputs = None
        self.output = None

    def eval(self):
        raise NotImplementedError

class AndGate(GateBase):
    def __init__(self, *inputs):
        super().__init__()
        self.inputs = inputs

    def eval(self):
        self.output = all(inp for inp in self.inputs)

class OrGate(GateBase):
   ...

class XorGate(GateBase):
   ...

基类中只抛出异常的eval函数没有实际函数。如果基类中没有伪eval,如果派生类“忘记”实现它自己的eval,那么无论如何都会抛出一个异常,只是一个不同的类型。无需提醒。在

self.inputs也是类似的情况。必须简单地定义每个类的可用性。在

那么在基类中定义self.inputs和{}的主要目的是什么?API文档?派林特?Python式?或者它是从ABC(抽象基类)中提取的一个想法?在


Tags: 函数selfnoneoutput定义initdefeval
1条回答
网友
1楼 · 发布于 2024-10-02 12:30:11

使用“假人”的主要目的是多态性原理:

Wikipedia - Polymorphism (computer_science)

这个原则对于所有面向对象的语言都是通用的。该原则的主要思想是为每个派生类在基类中固定相同的接口。这就是为什么应该在基类中使用抽象方法来确保它们在派生类中的存在和实现。在

相关问题 更多 >

    热门问题