2017-06-22 4 views
0

Ich importiere eine Klasse Foo, die einen Standardparameter dir hat, auf dem wenn eine Funktion doit ausgeführt wird. Wie kann ich den Standard dir ändern? Muss ich diese Klasse erben und dann ändern, wie?Klasse überschreiben __init__ Standardparameter

class Foo(object): 
    def __init__(self, dir='xxx'): 
    self.bar = doit(dir) # fails because xxx is wrong 

Antwort

3

, warum Sie nicht nur ein anderes Argument angeben, wenn Sie eine Instanz der Klasse konstruieren:

foo = Foo(dir='something else') 

btw: dir ist ein Python eingebaut und daher nicht die beste Wahl als Variable Name.

, wenn Sie die Standardeinstellung geändert möchten, können Sie erben in der Tat:

class MyFoo(Foo): 
    def __init__(self, d='somethig else'): 
     super().__init__(d=d) 
+0

'Foo (dir = 'etwas anderes')' hat funktioniert, danke –

1

Nur eine Fabrik-Funktion für Foo Objekte erstellen und mit ihm getan werden:

def create_foo(): 
    return Foo(dir='my correct value goes here') 

Da Sie Foo importieren , könnten Sie einen Schritt weiter gehen und nur Schatten Foo wie folgt:

def Foo(): 
    import foo 
    return foo.Foo(dir='my correct value goes here') 

Natürlich können Sie erben von Foo. Achten Sie darauf, wie Sie die Basis Klassenkonstruktoren aufrufen. Ich finde es sooo schwer sich einzuprägen, dass ich am Ende einfach googlen muss. Jeden. Single. Zeit.

BTW: Sieht aus wie @hiro Protagonist hat bereits die Berufung super herausgefunden.

+0

wenn du herausgefunden hast, dass du 'gegoogelt' meinst ja: ich habe es herausgefunden! wie deine Annäherung übrigens auch ... –

Verwandte Themen