继承后使用抽象方法

时间:2017-01-24 09:59:37

标签: python inheritance intellij-idea pycharm multiple-inheritance

使用PyCharm IDE。 我想将2个抽象类A + B继承到1个新类C.我想实现其中一个类'方法并使用其他类'方法,这些方法在后面的类E中实现,在A中实现A的实现。

我的问题是:在创建C类时,intelliJ希望我实现所有方法,所以A类的方法和B类的方法。我只想实现A类方法,但需要B类的“接口”才能知道哪些方法可供我使用。有没有办法告诉intelliJ我不想在新类中实现某个类abstractmethods?

甚至 - 有没有办法以更好的方式完成所有这些?

class A(metaclass=ABCMeta):
    """interface class"""  
    @abstractmethod
    def click(self, c): pass

class B(metaclass=ABCMeta):
    """interface class"""   
    @abstractmethod
    def do_something(self): pass

class C(A, B):
    # implement methods of B here, use abstract methods of A 
    # as interface to know what methods are available for use
    def do_something(self):
        self.click("anything")

class D(A):
    # implement A
    def click(self, c):
        print("I clicked {}".format(c))

class E(C,D):
    # merge implementations to create runnable `do_something()`
    def main():
        self.do_something()

E.main()

1 个答案:

答案 0 :(得分:0)

正如所写,您的班级C仍然是抽象的,因为它没有实现A的抽象方法 - 所以它应该被标记为:

class C(A, B, metaclass=ABCMeta):
    # implement methods of B here, use abstract methods of A 
    # as interface to know what methods are available for use
    def do_something(self):
        self.click("anything")