所以,我正在构建一组简单的服务,我厌倦了必须手动实例化和硬编码很多我知道 Python 可以动态完成的事情。具体来说,我想做的是设置一个简单的服务管理器,以便我可以控制电源开/关/重置。现在,我已经知道如何让 Python 执行该实际功能,但我想抽象出一些东西,所以在高层次上,开发人员或用户可以执行以下操作:
Service.power.reboot
我基本上想要一个主类(服务),它可以将特定服务和操作(分别为电源和重启)作为参数。这将有一个网络服务,一个存储服务等。到目前为止我所做的如下:
class Service:
def __init__(self, service, action):
self.service = service
self.action = action
def start(self): # action to be performed
pass
def stop(self):
pass
def restart(self):
pass
def enable(self):
pass
def disable(self):
pass
def status(self):
pass
我希望它做的一个伪代码版本,我认为它会更好并且更多地拆分代码:
Class Service:
def __init__(self, service, action):
self.service = service
self.action = action
def parse_request(self):
# figure out what the user wants to do to what, return the class and method
return serviceClass, serviceAction
def do_what_the_user_wants(self):
# call the class, run the method
return class.method
class PowerService:
def __init__(self, action):
self.action = action
def _parse_and_run_user_action_request:
# voodoo here to iterate over the available methods for self and run
return result
def run(self):
# run some power-related thing
return result
def stop(self):
# stop some power-related thing
return result
etc...
在这种情况下,用户就像 Service('power', 'reboot') 或更理想的 Service.power.reboot(),服务模块接受参数(或服务之后的任何内容。),找出哪个实际要调用的服务和要运行的方法等。
名为 Power 的服务是一个继承自该类的类,但我想知道是否应该在init期间做一些事情来解析给定的参数,决定它要做什么,然后动态调用该类并执行给定的操作,而无需必须实际单独输入类。我想这样会更好(没有代码,只是显示我的意思的流程):
用户想要重启电源 -> 服务类获取命令使用电源类及其方法重启 -> 服务类接受两个参数,对类进行分类并动态运行该方法 -> 电源类运行重启方法,返回状态 -> 服务类将结果返回给用户
让我感到困惑的主要部分很简单:我如何制作一个 impl/API/factory 或其他任何东西来获取一堆复杂的模块并使用 API(各种)来接收字符串甚至点符号作为参数,所以“API”类或 impl 或任何知道如何处理它们的东西?
我只是还没有找到任何真正正确解释它的东西。我知道 python 可以动态调用函数、方法、类及其相关的属性、道具等。我只是找不到具体的方法,或者至少找不到有意义的设计模式。
很抱歉这篇冗长的帖子。