0

Использование PyCharm IDE. Я хочу наследовать 2 абстрактных класса A + B в 1 новый класс C. Я хочу реализовать один из методов класса и использовать методы другого класса, который реализован в реализации более позднего класса E usind A в D.Использование абстрактного метода после наследования

Моя проблема: при создании класса C intelliJ хочет, чтобы я реализовал все методы, поэтому методы класса А и методы класса В. Я просто хочу реализовать методы класса А, но мне нужен интерфейс класса В, чтобы узнать, какие методы доступны мне. Есть ли способ сказать 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() 
+0

Вы могли бы просто подавить осмотр: '# noinspection PyAbstractClass' – deceze

ответ

0

Как написано, ваш класс C еще абстрактные, так как он не реализует abstractmethods от 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") 
+0

Я согласен с этим, но есть ли способ заставить все абстрактные методы B быть внедрены в C, когда C объявлен как ABCMeta? – user1211030

+1

Нет (не по крайней мере) - но зачем вам это нужно, когда у вас есть рука на коде? В любом случае: вы уверены, что множественное наследование является правильным решением здесь? Может быть, композиция + делегация будет иметь больше смысла? –

+0

Я хочу дать код другим, чтобы внести свой вклад и нуждаться в них, чтобы иметь интерфейс A, но реализовать все методы B. Также да, я передумаю решение с множественным наследованием и попробую альтернативный подход. Спасибо за ваш вклад – user1211030

Смежные вопросы