Skip to main content
 首页 » 编程设计

Python 对象初始化错误。还是我误解了对象的工作原理

2025年05月04日8kenshinobiy

  1 import sys 
  2  
  3 class dummy(object): 
  4     def __init__(self, val): 
  5         self.val = val 
  6  
  7 class myobj(object): 
  8     def __init__(self, resources): 
  9         self._resources = resources 
 10  
 11 class ext(myobj): 
 12     def __init__(self, resources=[]): 
 13         #myobj.__init__(self, resources) 
 14         self._resources = resources 
 15  
 16 one = ext() 
 17 one._resources.append(1) 
 18 two = ext() 
 19  
 20 print one._resources 
 21 print two._resources 
 22  
 23 sys.exit(0) 

这将为 one 和 two 对象打印对分配给 one._resources 的对象的引用。我认为 two 将是一个空数组,因为如果在创建对象时未定义它,它显然将其设置为空数组。取消注释 myobj.__init__(self, resources) 做同样的事情。使用 super(ext, self).__init__(resources) 也可以做同样的事情。

我让它工作的唯一方法是使用以下内容:

two = ext(dummy(2)) 

我不应该在创建对象时手动设置默认值来完成这项工作。或者也许我会。有什么想法吗?

我用 Python 2.5 和 2.6 试过了。

请您参考如下方法:

你应该改变

def __init__(self, resources=[]): 
    self._resources = resources 

到

def __init__(self, resources=None): 
    if resources is None: 
        resources = [] 
    self._resources = resources 

一切都会好起来的。这是处理默认参数(如果它们是可变的)的详细信息。在 this page 的讨论部分有更多信息。 .