gpt4 book ai didi

Python 双重继承

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:20 25 4
gpt4 key购买 nike

我正在尝试为以下问题找到合适的继承配置:

我的基类是一个代理类,它有 3 个抽象方法:

class Agent():
__metaclass__ = abc.ABCMeta

def __init__(self):

@abc.abstractmethod
def bidding_curve(self):

@abc.abstractmethod
def evaluate_bidding_curve(self):

@abc.abstractmethod
def action(self):

代理可以使用可执行文件 (dymo) 或使用 FMU(C 源代码的 zip 文件)来模拟。所以我创建了 2 种不同类型的代理,它们继承自基础代理并实现了它们与模拟通信的方式。这是 dymo 仿真环境的实现,但同样适用于 FMU。

class DymoAgent(Agent):
def __init__(self, power, dymo):
"""
Agent based on the dymosim simulation environment.
@param dymo: The dymo that needs to be run
"""


super(DymoAgent, self).__init__()

self.dymo = dymo

def bidding_curve(self):
pass

def evaluate_bidding_curve(self, priority):
pass

def action(self, priority):
self.dymo.action()

DymoAgent 和 FMUAgent 决定了我的代理将如何与模拟环境交互。

接下来我需要代理的实现以确定代理将如何与应用程序交互。但是,我希望这种交互独立于模拟环境。例如。我想创建一个可以与 Heater 应用程序通信并实现这样做的逻辑的代理。

class Heater(WhatAgentShouldIUseHere):
pass

我希望这个 Heater 类实现 Agent 基类的抽象方法和 Dymo- 或 FMUAgent 的实现,以便它知道如何与模拟交互。但我不想用相同的逻辑(因此基本上是相同的代码)编写 2 个继承自不同模拟代理的 Heater 类。我用这张图片总结了这个问题:

enter image description here

有没有办法使用继承来防止这种情况?

/阿诺特

最佳答案

使 Heater 成为一个在其构造函数中接受代理的简单对象:

class Heater(object):
def __init__(self, agent):
self.agent = agent
# define other methods for interaction with Heater application
# in which you can access agent methods like self.agent.a_method(...)

关于Python 双重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294584/

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