2016-03-18 21 views
4

В следующей таблице показаны различные абстрактные базовые классы, которые используются по всему python. Тем не менее, я немного смущен (в этом контексте)абстрактные базовые классы python, разница между mixin и абстрактным методом

В чем разница между колонкой Abstract Methods и столбцом Mixin Methods. Возможно ли один вариант, а другой нет?

Я обдумывал это, и каждая из моих «теорий» кажется неправильной.

reference


enter image description here

+1

* «Абстрактные методы» *: вы должны предоставить. * «Методы Mixin» *: тогда вы получите. – jonrsharpe

ответ

6

Все в столбце Абстрактные методы, вы должны реализовать себя. ABC предоставляет стандартные реализации методов в столбце «Методы Mixin», реализованные в терминах методов, которые вы должны писать.

2

Абстрактные методы - это те, которые вы должны определить, когда наследуете эту ABC.

В колонке Mixin перечислены методы, которые вы можете использовать впоследствии, вы получаете их бесплатно, наследуя не от object, а от этой ABC. Если вы определяете __getitem__, вы можете автоматически использовать, например, __iter__.

Другим преимуществом наследования от этих классов является то, что каждый может видеть после себя, что должен был быть ваш класс, поскольку он равен issubclass(your_class, any_ABC), а любой экземпляр - isinstance(your_object, any_ABC). Но это написано в учебнике после таблицы, которую вы опубликовали.

+0

Что такое точки на 'issubclass()' и 'isinstance()' – AlanSTACK

+0

Извините, это было неправильно, это только встроенные методы с двумя аргументами, спасибо – Ilja