也许总有一种更好的方法可以做到这一点,但是总的来说,我有一个通用类,在实例化时,我想继承另一个类(取决于输入的内容)。几乎在通用类init中创建一个“路由器”。
class GenericClass():
def __init__(self, class_input, var):
classes = {
'1': Class1,
'2': Class2
}
return_class = classes.get(class_input)
# this is the part I can't figure out how to implement
super().return_class().__init__(var)
class BaseClass(object):
def __init__(self, var):
self.var=var
def method1(self):
raise NotImplementedError('sub-class should implement this.')
class Class1(BaseClass):
def __init__(self, var):
super().__init__(var)
def method1(self):
print(self.var)
class Class2(BaseClass):
def __init__(self, var):
super().__init__(var)
def method1(self):
print(self.var)
也许我只是看错了方向。对方法的变化持开放态度。
答案 0 :(得分:2)
由于GenericClass
实际上从未用作类,因此它甚至不应该成为一个类,只需将其设置为常规函数即可,该函数创建并返回指定类的实例。 super()
不参与其中-代码基本上是return classes[class_input](var)
。
如果确实需要一个类(例如,它用作您实际要返回的类的基类),则需要改写__new__()
(使用完全相同的代码)如上所述)-__init__()
来不及影响所创建的类。