Python 对namedtuple使用uuu getattribute_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?

Python 对namedtuple使用uuu getattribute_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?,python,namedtuple,getattribute,Python,Namedtuple,Getattribute,我正在探索用命名字典代替大量小字典的可能性 因为dict键(字符串)已经映射到namedtuple的字段名上,所以我必须使用namedtuple的dundered getattribute方法来访问这些值 这不仅使代码看起来有点奇怪,而且我想知道这是否是一种不好的做法 因为dict键(字符串)已经映射到namedtuple的字段名上,所以我必须使用namedtuple的dundered getattribute方法来访问这些值 那是错误的工具。您应该使用内置函数,而不是\uu getattrib

我正在探索用命名字典代替大量小字典的可能性

因为dict键(字符串)已经映射到namedtuple的字段名上,所以我必须使用namedtuple的dundered getattribute方法来访问这些值

这不仅使代码看起来有点奇怪,而且我想知道这是否是一种不好的做法

因为dict键(字符串)已经映射到namedtuple的字段名上,所以我必须使用namedtuple的dundered getattribute方法来访问这些值

那是错误的工具。您应该使用内置函数,而不是
\uu getattribute\uu
方法:

getattr(your_namedtuple, attribute_name)
也就是说,如果您想主要通过名称而不是索引来访问数据,那么一直调用
getattr
会很尴尬。您可以将您的
namedtuple
类划分为子类,并更改
\uuu getitem\uuuu
的工作方式,以便仍然可以使用索引符号:

class MyType(namedtuple(...)):
    __slots__ = () # avoid creating instance __dict__s
    def __getitem__(self, index):
        try:
            return super().__getitem__(index)
        except TypeError:
            return getattr(self, index)

几乎可以肯定,这不是正确的做法。我还是不明白你为什么要用它。你能举个例子吗?你为什么要替换字典?@bobah通常情况下,当你有一堆字典作为记录时,你真的只需要一个名为tuple的
。它使用更少的内存和更快的速度,因为它使用随机访问而没有任何散列。当然,这是否正确取决于细节。