から定義された配列属性へのアクセスは私のコードであるとき、私はシンプルなノードツリーを作るために抱き合わせている:再帰エラーそこでここでは、クラスレベル
class Node(object):
child = []
def __init__(self,id):
self.id =id
def addChild(self,child):
self.child.append(child)
def printChildOnwards(self):
yield self.id
for x in self.child:
yield from x.printChildOnwards()
firstChild = Node('1')
secondChild = Node('2')
thirdChild = Node('3')
fourthChild = Node('4')
firstChild.addChild(secondChild)
firstChild.addChild(thirdChild)
for x in firstChild.printChildOnwards():
print(x)
私はself
によって定義されたクラスレベルの属性にアクセスしました自分のバージョンにアクセスしていることを確認してください。
出力:1 2 3
この行動の背後にある理由は何ですか: 1 2 2 2 2 ... then recursion error max depth
私は単に__init__
self.child = []
このような出力の内部でそれを定義する場合、それは動作しますが?なぜそれを
__init__
に含める必要がありますか?単に
printChildOnwards
呼び出して
class Node(object):
child = []
def __init__(self, id):
self.id = id
child
属性はNode
のすべての単一のインスタンスは、そのオブジェクトを共有することを意味しNode
クラス、上のクラスレベルの属性であり、これすべての反復されます:あなたの最初の例では
サイドノート:Python 3を使用しているので( 'yield from'はそれを与えます)、' object'から明示的に継承する必要はありません。これはPython 2では(新しいスタイルのクラス動作を強制するために)必要ですが、Python 3ではすべてのクラスが「新しいスタイル」であり、 'object'から暗黙的に継承されています。 – ShadowRanger
ありがとうございました! –