我正在探索用namedtuples替换大量小字典的可能性。
因为dict键(字符串)已经映射到了namedtuples的字段名称,所以我必须使用namedtuple的dundered getattribute方法来访问这些值。
这不仅使代码看起来很奇怪,而且我还想知道这是不是很糟糕的做法?
答案 0 :(得分:3)
因为dict键(字符串)已经映射到了namedtuples的字段名称,所以我必须使用namedtuple的dundered getattribute方法来访问这些值。
这是错误的工具。您应该使用getattr
内置函数,而不是__getattribute__
方法:
getattr(your_namedtuple, attribute_name)
也就是说,如果你想主要通过名称而不是索引来访问你的数据,那么一直调用getattr
会很尴尬。您可以继承namedtuple
类,并更改__getitem__
的工作方式,这样您仍然可以使用索引表示法:
class MyType(namedtuple(...)):
__slots__ = () # avoid creating instance __dict__s
def __getitem__(self, index):
try:
return super().__getitem__(index)
except TypeError:
return getattr(self, index)