簡體   English   中英

python類中奇怪的事情?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM