gpt4 book ai didi

python - 没有实例的类 - 更多 pythonic 方式?

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:55 24 4
gpt4 key购买 nike

我有一个应用程序,(更多的)开发人员在其中添加了命令。这些命令由一组函数组成,主要是用于实际执行操作的“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

这很好用,但似乎有点“非 Pythonic”,因为我们从未创建这些命令的实例。此外,虽然这确实给出了一个框架,但 abc 的目的是没有用的——我们从不创建实例,所以我们永远不会看到缺少的抽象方法。

是否有更 pythonic 的方式来归档这种类型的接口(interface)?

最佳答案

如果你想明确地阻止这个类被实例化(抽象),你可以使用这个:

class Command():
def __init__(self):
raise NotImplementedError()

您还可以在基类的所有方法中引发此错误 NotImplementedError 而不是 pass 更像是一个接口(interface)(需要重新定义所有方法).

关于python - 没有实例的类 - 更多 pythonic 方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024655/

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