代码之家  ›  专栏  ›  技术社区  ›  M Leonard

super包含类的变量?

  •  -1
  • M Leonard  · 技术社区  · 6 年前

    也许有一种更好的方法可以一起完成这项工作,但是总的来说,我有一个通用类,在实例化之后,我希望超越另一个类(取决于输入是什么)。几乎在泛型类init中创建一个“router”。

    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 回复  |  直到 6 年前
        1
  •  2
  •   jasonharper    6 年前

    自从 GenericClass 从未实际用作类,它甚至不应该是类-只需将其作为一个常规函数,创建并返回指定类的实例。 super() 在这方面不起作用-代码基本上是 return classes[class_input](var) .

    如果它确实需要是一个类(例如,它被用作您实际想要返回的类的基类),则需要重写 __new__() 相反(与上面描述的代码完全相同)- __init__() 太晚,无法影响创建的类。