Python设计问题

2024-03-29 13:48:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个C程序员,我对Python已经很在行了。但是,我仍然有一些问题,让我的脑海围绕着Python的OO敬畏。在

以下是我目前的设计问题:

最后的“产品”是一个用Python创建的JSON数据结构(并传递给Javascript代码),其中包含不同类型的数据,如:

{ type:url, {urlpayloaddict) }
{ type:text, {textpayloaddict}
...

我的Javascript知道如何解析和显示每种类型的JSON响应。在

我对这个设计很满意。我的问题是在Python代码中处理这些数据。在

我从各种来源获取数据:MySQL、表查找、对web服务的API调用。。。 基本上,我应该创建一个超类responseElement并将其专门用于每种类型的响应,然后在Python代码中传递这些对象的列表,还是应该简单地传递包含键-值对中响应数据的字典列表。答案似乎导致了截然不同的实现。在

我有点不确定我是不是太喜欢对象了??在


Tags: 数据对象代码jsonurl数据结构类型列表
3条回答

不同的响应源是否代表了根本不同的对象类别或类?他们看起来不像你描述的那样。在

因此,各种编码/解码函数和只传递一种类型似乎是最好的解决方案。在

该类型可以是dict或您自己的类,如果您对数据使用特殊的方法(但是这些方法将不关心输入和输出编码是什么),或者您可以将编码/解码对放入类中。(Decode将是一个类方法,返回一个新实例。)

在我看来,它基本上是这样的:你应该试着在事物相同的地方保持不变,在不同的地方把它们分开。在

如果您对数据执行完全相同的操作,并且这些数据都可以用一种通用的格式表示,那么就没有理由为它设置单独的对象—尽快将其转换为通用格式,并且在实现不区分的内容时不要重复自己的操作。在

如果每种数据类型/源都需要特定于它的特定操作,而在Python代码所处理的层上,这些操作之间没有太多的重叠,那么就将它们放在不同的对象中,这样就可以在专用代码和它能够操作的特定数据之间保持紧密的关联。在

你的接收方对象(很可能是不同类的实例,可能由工厂模式根据传入数据的来源生成)都应该有一个通用方法,该方法返回适当的dict(或其他可直接使用JSON的结构,例如将转换为JSON数组的list)。在

与一个答案所说的不同,这种方法显然不需要更高级别的代码来知道它在处理什么样的接收器(多态性可以用任何OO语言为您处理这些问题!)--更高级别的代码也不需要知道“键的名称”(就像另一个答案特别声明的那样),因为它可以很好地将“JSON'able data”视为非常不透明的数据标记(只要它适合作为json.dumps以后调用的参数!)。在

为最终的序列化(或其他类似的统一处理,但可以将JSON转换为序列化的一种特定形式)而构建并传递“普通旧数据”对象的容器(以各种方式生成并添加到容器中)是一种常见的OO模式。毕竟,不需要携带比这样的POD数据更丰富或更重的内容,在Python中,使用dicts作为PODs通常是一个非常自然的实现选择。在

相关问题 更多 >