我的结构如,
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
类的实例,但我希望它应该返回Bar
或Zoo
类的实例(即。根据提供给Foo类的值调用的任何类)
提前致谢
答案 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