我希望在内部使用namedtuples,但我想保持与提供普通元组的用户的兼容性。
from collections import namedtuple
tuple_pi = (1, 3.14, "pi") #Normal tuple
Record = namedtuple("Record", ["ID", "Value", "Name"])
named_e = Record(2, 2.79, "e") #Named tuple
named_pi = Record(tuple_pi) #Error
TypeError: __new__() missing 2 required positional arguments: 'Value' and 'Name'
tuple_pi.__class__ = Record
TypeError: __class__ assignment: only for heap types
namedPi = Record(*tuplePi)
或者namedPi = Record._make(tuplePi)
转换后,摆脱tuplePi
,对吗? - thinwybktuplePi
了。 - Martijn Pieterstuple.__new__(Record, tuple_pi)
是_make
在幕后使用的工具。 - ofoRecord.__new__
本身就是一个薄薄的包装器,它包装了tuple.__new__(Record, ...)
。重复使用相同的tuple_new
引用比使用cls.__new__(cls, iterable)
更简单、更高效,后者在调用tuple_new()
之前会在解释器调用堆栈中创建一个新的函数框架。 - Martijn Pieters