2017-06-22 14 views
0

クラスFooをインポートします。このパラメータのデフォルトパラメータはdirで、doitを実行します。 dirのデフォルトを変更するにはどうすればよいですか?このクラスを継承し、それを変更する必要がありますか?ところでクラス上書き__init__デフォルトパラメータ

foo = Foo(dir='something else') 

:あなたはクラスのインスタンスを作成するとき

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

答えて

3

は、なぜあなただ​​けの別の引数を指定しないdirしたがって、変数として最良の選択ではないのpythonビルトインされ、名。

デフォルトを変更したい場合、あなたは確かに継承することができます。

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

'Foo(dir = 'something else')'働いた、ありがとう –

1

だけFooオブジェクトのファクトリ関数を作成し、それを使って行うこと:

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

あなたがFooを輸入しているのであなたは一歩一歩進んで、次のようにFooのように影をつけることができます:

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

もちろんを継承しますFooを継承します。ベースの クラスのコンストラクタを呼び出す方法を調べてください。私はsoooを見つけるのは難しいと思います。すべて。シングル。時間。

ところで:@ hiroの主人公は、すでに呼び出されたスーパーを持っているように見えます。

+0

「見つけた」と「グーグルド」を意味する場合:はい、私はそれを理解しました!あなたのアプローチのように、途中で... –

関連する問題