何时使用类以及何时使用dict?

时间:2013-09-22 15:49:23

标签: python class dictionary

我正在处理一个有限的“对象”列表,我将在我的小脚本中使用它:

books = [ 
    {'name': 'Book1': 'id', '123', 'text', '.....'},
    {'name': 'Book2': 'id', '123', 'text', '.....'},
    {'name': 'Book3': 'id', '123', 'text', '.....'},
]

为这种书籍类型创建一个类是否有意义,或者它是否很好?

创建一个类的问题是可能会有更多的样板。

4 个答案:

答案 0 :(得分:4)

由于您只想存储数据,我建议您使用命名元组。这是named tuples如何使用的一个很好的例子。

理想情况下,您可以简单地遍历书籍列表,然后获取每个列表的值,然后将它们放入一个命名元组中。然后就可以这样简单地访问它们:

some_book.name

这是一个简短的例子:

>>> from collections import namedtuple
>>> NetworkAddress = namedtuple('NetworkAddress',['hostname','port'])
>>> a = NetworkAddress('www.python.org',80)
>>> a.hostname
'www.python.org'
>>> a.port
80
>>> host, port = a
>>> len(a)
2
>>> type(a)
<class '_ _main_ _.NetworkAddress'>
>>> isinstance(a, tuple)
True
>>>

这样可以更轻松地访问您图书中的数据,并帮助您确保图书所需的所有数据都存在。

答案 1 :(得分:2)

您当前的代码完全正确。而且它在运行时的速度要快得多,因为Python在实例化非内置对象时有点慢。如果你想要高性能,那么尽量避免在Python中实例化类。但是你支付代码的价格有点难看。

您甚至可以创建一个功能,将条目添加到您的书籍列表中。如果你有一个班级,这相当于你的“构造函数”。

答案 2 :(得分:2)

如果你有许多“哑”对象只有成员而没有方法,那么这种模式可能有用:

class Obj(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

在这三行之后,您可以使用

创建包含所需字段的对象
books = [
   Obj(name='Book1', id='123', text='.....'),
   Obj(name='Book2', id='124', text='.....'),
   Obj(name='Book3', id='125', text='.....'),
   Obj(name='Book4', id='126', text='.....')
]

您可以稍后使用

for b in books:
    print b.id, b.name

这种方法允许您使用相同的更易读的语法编写程序代码,如果将来您需要使用方法更新为完整的特定类。

答案 3 :(得分:0)

如果你不计划使用方法,你应该没那么好。否则我会推荐使用课程。