class TreeNode:
def __init__(self,data,children = []):
self.data = data
self.children = children
def __str__(self,level=0):
ret = " " * level str(self.data) '\n'
for child in self.children:
ret = child.__str__(level 1)
return ret
# adding the children to the tree node
def addchildren(self,TreeNode):
self.children.append(TreeNode)
問題1:請解釋def __str__(self,level=0):。尤其child.__str__(level 1)
drinks = TreeNode('Drinks',[])
cold = TreeNode('Cold',[])
hot = TreeNode('Hot',[])
cola = TreeNode('Cola',[])
cappucino = TreeNode('Cappucino',[])
drinks.addchildren(cold)
drinks.addchildren(hot)
cold.addchildren(cola)
hot.addchildren(cappucino)
print(drinks)
問題 2:還有一件事,如果我使用self.children.append(TreeNode.data),它為什么會給出這種型別的錯誤(如下所示),我知道它不會起作用,但是為什么 print() 陳述句拋出此錯誤而不是在self.children.append(TreeNode). 為什么說預期為 0 個引數,得到 1 個引數?
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_944/4195955341.py in <module>
----> 1 print(drinks)
~\AppData\Local\Temp/ipykernel_944/3676504849.py in __str__(self, level)
8 ret = " " * level str(self.data) '\n'
9 for child in self.children:
---> 10 ret = child.__str__(level 1)
11
12 return ret
TypeError: expected 0 arguments, got 1
uj5u.com熱心網友回復:
def __str__(self,level=0):
ret = " " * level str(self.data) '\n'
for child in self.children:
ret = child.__str__(level 1)
return ret
" " * level表示重復空間級時間。for 的默認值level是0物件本身和孩子的級別加一,這些孩子再次呼叫__str__他們的孩子,級別加一。所以當前物件在它的行首有 0 個空格,它的孩子在他們的行首有 1 個空格,在他們的行首有孩子的孩子 2 個空格等等,這提供了很好的視覺表現,類似于你在瀏覽時可能遇到的情況目錄例如:
rootdir
dir1
dir11
dir12
dir2
dir21
dir22
其中 dir11 和 dir12 在 dir1 內,dir21 和 dir22 在 dir2 內,dir1 和 dir2 在 rootdir 內。
python__str__方法有超過 1 個引數(超出 的任何引數self)是不常見的。假設其中一個孩子是元組,(1,2,3)那么當您嘗試列印您的樹時,它確實嘗試列印級別等于1,即
(1,2,3).__str__(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/350525.html
上一篇:比T(n)高的大Oh符號
