【发布时间】:2020-12-31 08:47:47
【问题描述】:
我目前有一个这样的基类:
from abc import ABC, abstractmethod
class BaseClass(ABC):
@abstractmethod
def __init__(self, param1, param2):
self._param1 = param1
self._param2 = param2
@abstractmethod
def foo(self):
raise NotImplementedError("This needs to be implemented")
现在我有了希望用户覆盖的抽象方法 foo。所以如果他们定义一个这样的类:
from BaseClassFile import BaseClass
class DerrivedClass(BaseClass):
def __init__(self, param1, param2):
super().__init__(param1, param2)
所以这里的方法 foo 没有在 DerivedClass 中被覆盖/定义,当我创建这种类型的对象时,它会抛出一个 TypeError,但我想抛出一个 NotImplementedError。我该怎么办。
当前错误:
TypeError: Can't instantiate abstract class FF_Node with abstract methods forward
【问题讨论】:
-
“当我创建这种类型的对象时,它会抛出一个 TypeError,但我想抛出一个 NotImplementedError” - 你为什么想要一个 NotImplementedError? TypeError 是这里的标准预期结果。如果您尝试实际调用
BaseClass.foo(可能通过super之类的方式发生),就会得到NotImplementedError。 -
我希望它为用户提供更多信息,而不仅仅是 TypeError。就像我想给出一个自定义错误消息一样。
-
标准错误已经很丰富了,不‽你需要重写
ABC/abstractmethod;NotImplementedError在这里并没有真正做任何事情。 -
好的!人家说的有道理。但我希望即使具有相同的描述,我也能得到 NotImplementedError 而不是 TypeError。感谢您的帮助
标签: python error-handling abstract