Абстрактный базовый класс - это контракт . Это список обещаний, которые должен выполнять любой класс, производный от него.
Обещания каждого из collections
классов перечислены в документах . Например, все, что наследуется от MutableSequence
, будет иметь __getitem__
, __setitem__
, __delitem__
и некоторые другие.
Вы не можете создать экземпляр договора!
Когда вы создаете класс, который наследует от абстрактного базового класса, вы не наследуете методы. (Ну ... см. Примечание ниже.) Вы наследуете кучу «абстрактных методов», которые являются просто заполнителями. Чтобы выполнить обещание, которое вы дали, наследуя от ABC, вы должны дать определения для этих методов. Они могут делать все, что угодно, но они должны быть там.
На самом деле методы, которые вы наследуете, могут быть реальными методами, и вы можете делегировать их с помощью super()
. Это позволяет вам указать поведение по умолчанию. Но это не часто используется.