我想在内部使用namedtuple,但是我想保持与为我提供普通tuple的用户的兼容性。
from collections import namedtuple
tuplePi=(1,3.14,"pi") #Normal tuple
Record=namedtuple("MyNamedTuple", ["ID", "Value", "Name"])
namedE=Record(2, 2.79, "e") #Named tuple
namedPi=Record(tuplePi) #Error
TypeError: __new__() missing 2 required positional arguments: 'Value' and 'Name'
tuplePi.__class__=Record
TypeError: __class__ assignment: only for heap types
您可以使用*args
调用语法:
namedPi = Record(*tuplePi)
这会将tuplePi
序列的每个元素作为单独的参数传递。
您还可以使用namedtuple._make()
class方法将任何序列转换为实例:
namedPi = Record._make(tuplePi)
演示:
>>> from collections import namedtuple
>>> Record = namedtuple("MyNamedTuple", ["ID", "Value", "Name"])
>>> tuplePi = (1, 3.14, "pi")
>>> Record(*tuplePi)
MyNamedTuple(ID=1, Value=3.14, Name='pi')
>>> Record._make(tuplePi)
MyNamedTuple(ID=1, Value=3.14, Name='pi')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句