将父类的self更改为subClass

时间:2012-10-23 12:29:23

标签: python class self

我的结构如,

class Foo(object):
    def __init__(self, value=True):
        if value:
            Bar()
        else:
            Zoo()
    pass

class Bar(Foo):
    pass

class Zoo(Foo):
    pass




z = Foo(True)  # instance of Foo() class

当我实例化类Foo()时,它将返回Foo类的实例,但我希望它应该返回BarZoo类的实例(即。根据提供给Foo类的值调用的任何类)

提前致谢

2 个答案:

答案 0 :(得分:7)

只需使用一个功能:

def foo(value=True):
    if value:
        return Bar()
    else:
        return Zoo()

不需要类,因为您只想从两个其他类创建实例。因此,您可以使用函数在两者之间进行选择。

这通常被称为工厂。


如果您希望能够为初始化程序提供自定义参数,可以使用:

def foo(value=True):
    if value:
        return Bar
    else:
        return Zoo

并将其称为:

z = foo(True)(params for Bar/Zoo)

答案 1 :(得分:4)

这正是__new__()的用途:

class Foo(object):
    def __new__(cls, value=True):
        if cls != Foo:
            return super(Foo, cls).__new__(cls)
        elif value:
            return super(Foo, cls).__new__(Bar)
        else:
            return super(Foo, cls).__new__(Zoo)

class Bar(Foo):
    pass

class Zoo(Foo):
    pass

z = Foo(True)  # instance of Bar() class