所以这是一个python设计问题+多重遗传。我正在做我的一个程序,我遇到了一个问题,我想不出一个像样的方法来解决。你知道吗
保持简单。软件扫描另一个程序生成的日志事件文件。最初,它创建每个事件并将其存储在一个代表性的事件对象中。但是我想用一种更健壮的语言快速地访问它们,所以在对每个事件进行一点处理之后,我将它们加载到一个sqldb中,这样就比以前有了更多的数据。当我查询DB时,我想为每个代表事件的条目重新创建一个对象,这样更容易处理。你知道吗
我遇到的问题是,我希望避免大量重复的代码,从技术上讲,我应该能够为每个事件重用原始类中的一些代码。示例:
class AbstractEvent:
__init__(user, time)
getTime()
getUser()
class MessageEvent(AbstractEvent):
__init__(user,time,msg)
getMessage()
class VideoEvent(AbstractEvent):
pass
但是,数据进入数据库后会有额外的数据,因此需要有新的子类:
class AbstractEventDB(AbstractEvent):
__init__(user, time, time_epoch)
getTimeEpoch()
(static/classmethod) fromRowResult(row)
class MessageEventDB(AbstractEventDB, MessageEvent):
__init__(user, time, msg, time_epoch, tags)
getTags()
(static/classmethod) fromRowResult(row)
class VideoEventDB(AbstractEventDB, VideoEvent):
pass
这是一个比正在发生的事情更简单的版本,但是它显示了一些正在发生的事情。我将日志文件中的长格式时间戳更改为epoch时间戳,当它们进入DB时,会在消息事件上添加各种标记,但是其他事件除了时间戳更改之外没有任何额外的内容。你知道吗
上面是我想要格式化它的理想方式,但是我遇到的问题是,DB对象端的调用签名与简单事件端完全不同;因此,当我尝试调用super()时,我得到了一个关于缺少预期参数的错误。你知道吗
我希望有人能提供一些关于如何构造它的建议,避免代码重复10-20次,特别是在fromRowResult(工厂方法)中。非常感谢你的帮助。你知道吗
我认为您需要的是一个用于decorator设计模式的Python实现。 http://en.wikipedia.org/wiki/Decorator_pattern
其主要思想是用继承+组合取代多重继承:
相关问题 更多 >
编程相关推荐