NamedtuplesはPythonで小さなデータコレクションの名前を付けるのに便利です。どこで名前付きタプルクラスをPythonで定義すべきですか - どの名前空間ですか?
例えば、このnamedtupleを取る:
import collections
sesameEpisodeNTC = collections.namedtuple('sesameEpisodeNTC',
'lead_character', 'has_elmo')
se0 = sesameEpisodeNTC(lead_character='bigbird', has_elmo=False)
は、クラス定義( 'sesameEpisodeNTCは=' ...)別のクラスの属性を行うことができますか?モジュールネームスペースが乱雑にならないように、クラス内にいくつかの名前付きタプルを保持することをお勧めします。しかし、これは漬け物(cPickle、dill)に問題を引き起こす。
同様に、名前付きタプルクラス定義の最初のパラメータに注目しました。タイプ名(つまり 'sesameEpisodeNTC')はクラスの名前でなければなりません。そうでなければ酸洗は機能しません。 (2.7と3.4の両方を使用して)重複は理想的ではありません。 typenameパラメータのベストプラクティスは他にもありますが、コードを酸漬けのコードに影響しますか?
名前のついたタップルで見つからない他の広範に文書化されていないコーナーケースがありますか? Pythonの最も有用なデータ構造の一部は、stdlibの一部に絡みつく可能性のある鋭いコーナーを持っています。
パラメータ値*は、クラスの実際の名前です。クラスオブジェクトを参照するために使用する変数が通常はクラス名と同じであるという事実は単なる規約であり、 'class'文が両方に対して同じ名前を使用するという事実によって補強されています。 – chepner
@chepnerが言ったことに加えて、 'pickle'が動作するためには変数名とパラメータ値が同じでなければなりません。また、 'pickle'はモジュールレベルで定義されたクラスに対してのみ機能しますので、' namedtuple'定義を別のクラスの属性にすることはできないので、いわゆる名前空間汚染に悩まされています。これを回避するために汎用的またはメタ名前空間定義クラスである独自のモジュールレベルのクラスを定義することができるかもしれません。 – martineau
collections.namedtupleは、pickleを動作させるために、変数名とパラメータ名が同じでなければならないことを文書化する必要がありますか? – MHH