因此,我正在构建一组简单的服务,而我不得不手动实例化和硬编码很多我知道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(),服务模块接受参数(或Service后面的任何内容。),找出调用哪个实际服务以及运行方法等等。
名为Power的服务是一个从该类继承的类,但是我想知道我是否应该在init期间做一些事情来解析给定的参数,确定它要做什么,然后动态调用该类并执行给定的操作,而不必实际单独键入类。我在想这样会更好(没有代码,只显示我的意思):
用户希望重新启动电源->服务类获取命令使用重新启动方法->服务类接受两个参数,对类进行分类并动态运行方法-> power类运行重新启动方法,返回状态->服务类将结果返回给用户
使我感到困惑的主要部分很简单:我如何制作一个impl / API / factory或其他方法来接收一堆复杂的模块,并使用API(某种形式)来接受字符串甚至是点分符号作为参数,这样“ API”类或impl或其他任何东西都知道如何处理它们?
我只是没有找到任何能正确解释它的东西。我知道python可以动态调用函数,方法,类及其相关的attrs,props等。我只是找不到具体的方法,或者至少找不到有意义的设计模式。
对冗长的帖子表示抱歉。
还有另一个选择是将实例的方法传递到服务类中:
class Service:
def __init__(self, action):
self.action = action
def doAction(self): # action to be performed
self.action()
class PowerService:
def reboot(self):
# Do some booty things
power = PowerService()
rebooter = Service(power.reboot)
rebooter.doAction() # calls power.reboot()