48

内部でnamedtupleを使用したいのですが、通常のタプルを提供するユーザーとの互換性を維持したいと考えています。

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
4

1 に答える 1

70

*args次の呼び出し構文を使用できます。

named_pi = Record(*tuple_pi)

tuple_piこれにより、シーケンスの各要素が個別の引数として渡されます。

namedtuple._make()クラス メソッドを使用して、任意のシーケンスをインスタンスに変換することもできます。

named_pi = Record._make(tuple_pi)

デモ:

>>> from collections import namedtuple
>>> Record = namedtuple("Record", ["ID", "Value", "Name"])
>>> tuple_pi = (1, 3.14, "pi")
>>> Record(*tuple_pi)
Record(ID=1, Value=3.14, Name='pi')
>>> Record._make(tuple_pi)
Record(ID=1, Value=3.14, Name='pi')
于 2014-07-28T16:49:39.010 に答える