python中字典的存储对象_优先使用Python中的对象字典

当您所做的只是描述某些属性时,使用字典而不是Python中的对象(反之亦然)是否有好处?

我正在处理的项目目前有许多地方使用字典,我通常会创建对象.在我看来,对象提供了更多的结构,并允许通过诸如pylint之类的程序进行更好的程序员错误检查,但是很难解释为什么我会使用对象而不是dict.

对于模拟示例,一个模块创建Widgets并包含如下方法:

def create(self, propertyA, propertyB=55, propertyC="default",

propertyD=None, propertyE=None, propertyF=None, propertyG=None,

propertyH=None, propertyI=None):

通过创建一个字典并将其传递给它来调用该方法:

widget_client = WidgetClient()

widget = {

"propertyA": "my_widget",

"propertyB": 10,

...

}

widget_client.create(**widget)

当我看到这个时,我发现这些属性中的每一个都描述了一个“Widget”,并且想要执行以下操作:

class Widget(object):

"""Represents a widget."""

def __init__(self, propertyA, **kwargs):

"""Initialize a Widget.

:param propertyA: The name of the widget.

:param kwargs: Additional properties may be specified (see below).

:returns: None

"""

self.propertyA = propertyA

self.propertyB = kwargs.get("propertyB", 55)

self.propertyC = kwargs.get("propertyC", "default")

self.propertyD = kwargs.get("propertyD", None)

self.propertyE = kwargs.get("propertyE", None)

self.propertyF = kwargs.get("propertyF", None)

然后更新create()方法,看起来像这样:

def create(self, widget):

最终被称为这样:

widget_client = WidgetClient()

widget = Widget(propertyA="my_widget")

widget.propertyB = 10

...

widget_client.create(widget)

在我看来,这显然更好,但过去我错了,我想不出如何解释自己.当然我还在使用** kwargs可以通过将Widget分解为更小的组件/相关部件并创建更多对象等来避免,但我觉得这是一个很好的“第一步”.这有什么意义吗?

字典优点:

>更快和/或更高的内存效率

字典缺点:

>无法通过静态代码检查程序捕获一些错误

>可能永远不会显示或知道所有窗口小部件属性的完整列表

对象的好处:

>确切知道’Widget’是由什么组成的

>使用静态代码检查器可能会捕获错误(尽管使用** magic会阻止其中一些)

对象缺点:

>更慢和/或更低的内存效率

这似乎是一个愚蠢的问题,但为什么用可以用字典完成的对象做些什么呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值