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 的讨论部分有更多信息。 .
关于Python 对象初始化错误。还是我误解了对象的工作原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534407/