[英]Weird thing in python classes ?
我試圖在python中實現最短路徑算法。 嘗試連接路徑上的點時遇到麻煩。
我有一個名為NODE的類,我對這些節點進行了排列,然后在其中創建了新節點,如下所示:
nodes = []
for r in range ( 0, 3 ):
for c in range ( 0, 3 ):
nodes.append( NODE( c*WIDTH/20 + 30, r*HEIGHT/20 + 30, 10 ) )
這樣創建的節點很好,我可以將它們繪制得很好。
最初,我嘗試通過將節點對象列表添加到NODE類中來連接它們。 我遇到了一些問題,我認為問題出在遞歸類上,所以要測試一下,我做到了。
其中connection是NODE類中的空白數組。
nodes[0].connections.append( 0 )
print nodes[0].connections
nodes[1].connections.append( 1 )
print nodes[1].connections
print nodes[0].connections
這是我發現問題的地方,也許我只是個傻子,還是語言的問題? 鄧諾,但我想我會問。
輸出是這樣的:
[0]
[0,1]
[0,1]
如您所見,我僅在索引1的連接列表中添加了1個對象。但是,在打印內容時,我看到了兩個...。這使我感到困惑。
可能性1:您的代碼如下所示:
class NODE:
connections = []
def __init__(self, value):
self.value = value
nodes = [NODE(23), NODE(42)]
nodes[0].connections.append( 0 )
print nodes[0].connections
nodes[1].connections.append( 1 )
print nodes[1].connections
print nodes[0].connections
解決方案:類實例屬性應在__init__
內定義。 如果您在類級別定義connections
,則每個NODE
實例將共享相同的一個connections
列表。
class NODE:
def __init__(self, value):
self.value = value
self.connections = []
情況2:您的代碼如下所示:
class NODE:
def __init__(self, value, connections = []):
self.value = value
self.connections = connections
nodes = [NODE(23), NODE(42)]
nodes[0].connections.append( 0 )
print nodes[0].connections
nodes[1].connections.append( 1 )
print nodes[1].connections
print nodes[0].connections
解決方案:參數列表中的默認值僅創建一次,因此使用該默認值的所有NODE
實例將共享同一列表。 使用非可變的前哨值表示沒有傳遞任何參數。 通常None
一個適合此任務。
class NODE:
def __init__(self, value, connections = None):
self.value = value
if connections is not None:
self.connections = connections
else:
self.connections = []
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.