class overwrite __init__默认参数

时间:2017-06-22 13:22:18

标签: python

我导入了一个具有默认参数Foo的类dir,如果执行函数doit。如何更改默认dir?我是否需要继承此类然后更改它,如何?

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

2 个答案:

答案 0 :(得分:3)

为什么在构造类的实例时不要提供不同的参数:

foo = Foo(dir='something else')

btw:dir是一个内置的python,因此不是变量名的最佳选择。

如果你想改变默认值,你可以确实继承:

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

答案 1 :(得分: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。一定要查看如何打电话给基地 类构造函数。我发现很难记住我最终谷歌它。每一个。单。时间。

BTW:看起来像@hiro的主角已经有超级想象出来了。