我有以下简化方案:
class NetworkAnalyzer(object):
def __init__(self):
print('is _score_funct implemented?')
@staticmethod
def _score_funct(network):
raise NotImplementedError
class LS(NetworkAnalyzer):
@staticmethod
def _score_funct(network):
return network
我正在寻找我应该使用什么来代替 print('is _score_funct implemented?')
以确定子类是否已经实现了 _score_funct(network)
或不。
注意:如果有更 pythonic/常规的代码结构方式,我也将不胜感激。我这样定义它的原因是,一些 NetworkAnalyzer 子类在它们的定义中有 _score_funct,而没有它的子类将有不同的变量初始化,尽管它们具有相同的结构
最佳答案
使用抽象基类,除非它实现了所有抽象方法,否则您将无法实例化该类:
import abc
class NetworkAnalyzerInterface(abc.ABC):
@staticmethod
@abc.abstractmethod
def _score_funct(network):
pass
class NetworkAnalyzer(NetworkAnalyzerInterface):
def __init__(self):
pass
class LS(NetworkAnalyzer):
@staticmethod
def _score_funct(network):
return network
class Bad(NetworkAnalyzer):
pass
ls = LS() # Ok
b = Bad() # raises TypeError: Can't instantiate abstract class Bad with abstract methods _score_funct
关于python - 在 Python 中调用函数之前检查函数是否引发 NotImplementedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903165/