Skip to content

Python-Konstruktor und Standardwert

Lösung:

Veränderliche Standardargumente tun im Allgemeinen nicht das, was Sie wollen. Versuchen Sie stattdessen Folgendes:

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 

Lassen Sie uns veranschaulichen, was hier passiert:

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],)

Sie sehen, dass die Standardargumente in einem Tupel gespeichert sind, das ein Attribut der betreffenden Funktion ist. Dies hat eigentlich nichts mit der betreffenden Klasse zu tun und gilt für jede Funktion. In Python 2 ist das Attribut func.func_defaults.

Wie andere Poster darauf hingewiesen haben, möchten Sie wahrscheinlich verwenden None als Sentinel-Wert und geben jeder Instanz eine eigene Liste.

class Node:
    def __init__(self, wordList=None adjacencyList=None):
        self.wordList = wordList or []
        self.adjacencyList = adjacencyList or []
Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.