1

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

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

为这种类型的书创建一个类是否有意义,或者它的方式是否合适?

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

4

4 回答 4

4

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

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

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
>>>

这将使访问您书中的数据变得更加简单,并帮助您确保该书所需的所有数据都存在。

于 2013-09-22T15:57:47.710 回答
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

这种方法将允许您使用相同的更具可读性的语法编写程序代码,如果将来您需要使用方法更新到成熟的特定类,则无论如何都需要这种语法。

于 2013-09-22T16:02:55.910 回答
2

您当前的代码就其本身而言非常有意义。而且它在运行时要快得多,因为 Python 在实例化非内置对象时有些慢。如果你想要高性能,那么尽可能避免在 Python 中实例化类。然而,你付出的代价是你的代码有点难看。

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

于 2013-09-22T15:52:58.110 回答
0

如果您不打算使用方法,那么您应该没问题。否则我会推荐使用一个类。

于 2013-09-22T15:52:30.243 回答