我有一个应用程序,其中(更大的一组)开发人员添加命令。这些命令由一组函数组成,主要是'handle()'来实际执行操作和描述性属性,以帮助解析器找到正确的函数。 为了强制执行命令的某些标准,我们有一个所有命令都需要派生的基类。
我的问题是这些实际上并没有用作类,从来没有任何命令的实例。
class command(ABC):
'''
class all commands inherit from
'''
@property
@staticmethod
@abstractmethod
def name():
'''
returns the name of the command (which the parser acts on)
'''
pass
@property
@staticmethod
@abstractmethod
def help():
'''
returns the help text
'''
pass
@property
@staticmethod
@abstractmethod
def handle():
'''
contains the actual command handler, may return data
'''
pass
class commandPrint(command):
'''
example
'''
@staticmethod
def name():
return 'print'
@staticmethod
def help():
return 'Print some string'
@staticmethod
def handle(inputString):
print(inputString)
return inputString
这很好用,但似乎有点'unpythonic',因为我们从未创建过这些命令的实例。虽然这确实给了一个框架,但是abc的目的没有用 - 我们从不创建实例,所以我们永远不会看到缺少抽象方法。
是否有更加pythonic的方式来存档这种类型的接口?
答案 0 :(得分:-1)
如果要显式阻止此类实例化(抽象),可以使用:
class Command():
def __init__(self):
raise NotImplementedError()
您还可以在基类的所有方法中而不是NotImplementedError
中引发此错误pass
,使其更像是一个接口(需要重新定义所有方法)。