我如何让3个类在Python 3的单个基类中一起工作?

问题描述 投票:0回答:1

因此,我正在构建一组简单的服务,而我不得不手动实例化和硬编码很多我知道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等。我只是找不到具体的方法,或者至少找不到有意义的设计模式。

对冗长的帖子表示抱歉。

python abstract-class abstraction code-splitting class-factory
1个回答
0
投票

还有另一个选择是将实例的方法传递到服务类中:

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()
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.