2016-12-21 2 views
0

необходимы два уровня абстрактных классов и конкретный класс третьего уровня:Двухуровневая абстрактный класс иерархии без «последовательного выбора метода» ошибки

from abc import ABC 

class Shape(ABC): 
... 

class Quad(ABC, Shape): 
... 

class Square(Quadrilateral) 
... 

Этот код генерирует TypeError: Cannot create a consistent method resolution против декларации Quad. Я понимаю, что проблема заключается в неоднозначности множественного наследования. Quad не знает, нужно ли выводить определенные функции непосредственно из ABC или из Shape, но как исправить это? Я не могу отказаться от ABC от заявления Quad, потому что тогда он больше не будет абстрактным.

+0

Откуда берет «ABC»? Это 'abc.ABC'? Не могли бы вы дать [mcve]? – jonrsharpe

+0

Это стандартный питонический способ создания абстрактного класса: от abc импорт ABC –

+0

Then * положить это в вопрос *. Пожалуйста, отредактируйте и дайте менее абстрактные (и более внутренние) примеры. – jonrsharpe

ответ

0

По-видимому, простое изменение порядка родительских классов на Quad устраняет проблему. Я все еще неясен в теории, лежащей в основе (хотя это может быть выведено), но по крайней мере мой код работает сейчас.

класс Quad (Shape, ABC)

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