Python的构造函数和默认值

这个问题在这里已经有了答案:

  • “最小的惊讶”和可变的默认参数30的答案

  • 可变的默认参数通常不会做你想要的。 相反,试试这个:

    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