超级变量包含类吗?

时间:2018-07-17 13:03:23

标签: python class oop inheritance

也许总有一种更好的方法可以做到这一点,但是总的来说,我有一个通用类,在实例化时,我想继承另一个类(取决于输入的内容)。几乎在通用类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)

也许我只是看错了方向。对方法的变化持开放态度。

1 个答案:

答案 0 :(得分:2)

由于GenericClass实际上从未用作类,因此它甚至不应该成为一个类,只需将其设置为常规函数即可,该函数创建并返回指定类的实例。 super()不参与其中-代码基本上是return classes[class_input](var)

如果确实需要一个类(例如,它用作您实际要返回的类的基类),则需要改写__new__()(使用完全相同的代码)如上所述)-__init__()来不及影响所创建的类。