gpt4 book ai didi

python - 基类应该包含虚拟或占位符定义吗?为什么?

转载 作者:行者123 更新时间:2023-12-01 04:16:08 26 4
gpt4 key购买 nike

让我用下面的简单示例来解释“虚拟/占位符定义”的含义。不知道如何正确称呼他们。

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 和 self.eval() 的主要目的是什么? API文档?皮林特? python 风格?或者它是取自 ABC(抽象基类)的想法吗?

最佳答案

使用“傻瓜”(如您所说)的主要目的是多态性原理:

Wikipedia - Polymorphism (computer_science)

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

关于python - 基类应该包含虚拟或占位符定义吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34285940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com