python初学者:无法从零初始化一个对象

时间:2013-08-26 02:11:41

标签: python class dictionary

class Node:                                                                     
    def __init__(self,dic_nodes = dict()):                                      
        self.dic_nodes = dic_nodes                                              

root = Node()                                                                   
print("original_root:", root)                                                   
word = "sci"                                                                    
length = len(word)                                                              
for i in range(0, length):                                                      
    if word[i] not in root.dic_nodes:                                           
        print("root:", root)                                                    
        new_node = Node()                                                       
        print("new_node:", new_node, len(new_node.dic_nodes))                   
        root.dic_nodes[word[i]] = new_node                                      
        next = root.dic_nodes[word[i]]                                          
        print("next:", next, len(root.dic_nodes[word[i]].dic_nodes))            
        root = next                                                             
        print("root:", root)                                                    
    print()

输出如下:

original_root: <__main__.Node object at 0x109eb1510>  
root: <__main__.Node object at 0x109eb1510>  
new_node: <__main__.Node object at 0x109ec3350> 0  
next: <__main__.Node object at 0x109ec3350> 1  
root: <__main__.Node object at 0x109ec3350>  

root: <__main__.Node object at 0x109ec3350>  
new_node: <__main__.Node object at 0x109eb1510> 1  
next: <__main__.Node object at 0x109eb1510> 2  
root: <__main__.Node object at 0x109eb1510>  

root: <__main__.Node object at 0x109eb1510>  
new_node: <__main__.Node object at 0x109ec3fd0> 2  
next: <__main__.Node object at 0x109ec3fd0> 3  
root: <__main__.Node object at 0x109ec3fd0>

我的问题:
我第二次调用Node()来构造一个新对象,我认为“ len(new_node.dic_nodes)”也应该是0,就像我第一次创建一个新对象一样。我无法弄清楚我的问题在哪里。

1 个答案:

答案 0 :(得分:4)

因为每次都使用same dict as the default argument,所以默认dict会随着时间的推移而增长。而是这样做:

class Node:                                                                     
    def __init__(self, dic_nodes=None):
        if dic_nodes is None:
            dic_nodes = dict()
        self.dic_nodes = dic_nodes