首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候使用类,什么时候使用字典?

什么时候使用类,什么时候使用字典?
EN

Stack Overflow用户
提问于 2013-09-22 23:49:23
回答 4查看 90关注 0票数 1

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

代码语言:javascript
运行
复制
books = [ 
    {'name': 'Book1': 'id', '123', 'text', '.....'},
    {'name': 'Book2': 'id', '123', 'text', '.....'},
    {'name': 'Book3': 'id', '123', 'text', '.....'},
]

为这种图书类型创建一个类有意义吗,或者它的方式还可以吗?

创建一个类的问题是会有稍微多一点的样板。

EN

回答 4

Stack Overflow用户

发布于 2013-09-22 23:57:48

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

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

代码语言:javascript
运行
复制
some_book.name

下面是一个简短的示例:

代码语言:javascript
运行
复制
>>> 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
>>>

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

票数 4
EN

Stack Overflow用户

发布于 2013-09-22 23:52:58

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

您甚至可以创建一个函数,将条目添加到您的图书列表中。如果你有一个类,它就等同于你的“构造函数”。

票数 2
EN

Stack Overflow用户

发布于 2013-09-23 00:02:56

如果您有许多只有成员而没有方法的“哑巴”对象,那么这个模式可能会很有用:

代码语言:javascript
运行
复制
class Obj(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

在这三行之后,您可以简单地使用以下命令创建具有所需字段的对象

代码语言:javascript
运行
复制
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='.....')
]

您可以在以后使用它们

代码语言:javascript
运行
复制
for b in books:
    print b.id, b.name

这种方法将允许您使用更具可读性的语法来编写程序代码,这些语法在将来需要更新为具有方法的成熟的特定类时仍然是必需的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18945688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档