2017-02-26 7 views
-1

私の講師はいくつかのコードを書いていますが、私はそれをどのように読んでいいのかわかりませんし、Googleは助けにはならないのです。 名前タプルとクラスパラメータ

yield Arc(tail_node, head = tail_node - 1, label="1down", cost=1) 

は、クラス

class Arc(namedtuple('Arc', 'tail, head, label, cost')): 

アークはメソッドを持っていませんクラス、および無__initためのメソッド呼び出しです。私はクラスパラメータが別のクラスを受け入れたと思ったので、これらの2つがどのように相互作用しているのか分かりません。

答えて

0

collections.namedtuple関数はクラスファクトリです。いくつかのパラメータを取り、クラスを返します。クラスはtupleから継承されますが、その値は(インデックスだけでなく)属性として名前でアクセスすることもできます。

表示するArcクラスは、基本クラスを作成するためにnamedtupleを使用します。あなたは同等、それは自分の名前だ基本クラスを与え、別の文でそれを書くことができます:

Base = namedtuple('Arc', 'tail, head, label, cost') # this creates a class 
class Arc(Base): # this class inherits from the base class 
    pass 

Arcクラスは、独自のいかなるメソッドを持っていない場合は、それを定義する際に多くのポイントがあるではないでしょう(namedtupleから返されたクラスにはBaseの代わりにArcという名前を使用するだけです)。 Arcクラスにコードがいくつか追加されていると思いますが、あなたの質問には関係しません。基本クラスから継承された動作は、位置またはキーワード引数を使用してインスタンスを作成するのに十分です。したがって、表示するyieldステートメントには追加のコードは必要ありません。

関連する問題