Python的构造函数和默认值
这个问题在这里已经有了答案:
可变的默认参数通常不会做你想要的。 相反,试试这个:
class Node:
def __init__(self, wordList=None, adjacencyList=None):
if wordList is None:
self.wordList = []
else:
self.wordList = wordList
if adjacencyList is None:
self.adjacencyList = []
else:
self.adjacencyList = adjacencyList
让我们来说明这里发生了什么:
Python 3.1.2 (r312:79147, Sep 27 2010, 09:45:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo:
... def __init__(self, x=[]):
... x.append(1)
...
>>> Foo.__init__.__defaults__
([],)
>>> f = Foo()
>>> Foo.__init__.__defaults__
([1],)
>>> f2 = Foo()
>>> Foo.__init__.__defaults__
([1, 1],)
您可以看到,默认参数存储在一个元组中,该元组是所讨论函数的一个属性。 这实际上与所讨论的课程毫无关系,可以用于任何功能。 在python 2中,该属性将是func.func_defaults
。
正如其他海报指出的那样,您可能希望使用None
作为哨兵值,并将每个实例None
设为自己的列表。
我会尝试:
self.wordList = list(wordList)
强制它创建一个副本而不是引用同一个对象。
链接地址: http://www.djcxy.com/p/28515.html上一篇: Python constructor and default value
下一篇: C default arguments