在 Python 中调用函数之前检查该函数是否引发 NotImplementedError

ozg*_*ral 6 python oop class python-3.x

我有以下简化方案:

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
Run Code Online (Sandbox Code Playgroud)

我正在寻找应该使用什么来print('is _score_funct implemented?')确定子类是否已经实现_score_funct(network)

注意:如果有一种更Pythonic/传统的方式来构造代码,我也将不胜感激。我这样定义它的原因是,一些 NetworkAnalyzer 子类在其定义中具有 _score_funct ,而那些没有它的子类将具有不同的变量初始化,尽管它们将具有相同的结构

Dun*_*can 4

使用抽象基类,除非它实现了所有抽象方法,否则您将无法实例化该类:

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
Run Code Online (Sandbox Code Playgroud)