Абстрактные классы. Интерфейсы. Абстрактные классы. Интерфейсы. Абстрактные классы. Интерфейсы.

Абстрактные классы. Интерфейсы.

Open in new window

##Абстрактные классы и интерфейсы.

Абстрактные базовые классы и интерфейсы — близкие по назначению и смыслу сущности. Как первые, так и вторые представляют собой своеобразный способ документирования кода и помогают ограничить (decouple) взаимодействие отдельных абстракций в программе (классов).

Оперирование абстрактными классами называется метапрограммированием.

Абстрактным называется класс, который содержит один и более абстрактных методов.

Начиная с версии языка 2.6 в стандартную библиотеку включается модуль abc, добавляющий в язык абстрактные базовые классы. Он позволяет определить класс, указав при этом, какие методы или свойства обязательно переопределить в классах-наследниках:

from abc import ABCMeta, abstractmethod, abstractproperty


class Animal:
    __metaclass__ = ABCMeta

    @abstractmethod
    def say_something(self): pass

  @abstractproperty
  def speed(): pass


class Cat(Animal):
    def say_something(self):
        return "Miauuu!"

При этом гарантируется наличие абстрактных методов в объектах-наследниках.

metaclass — это класс класса. Подобно тому как обычный класс описывает свойства и поведение объекта, мета-класс описывает тоже самое но относительно класса. Получается что класс — это экземпляр метакласса.

Интерфейсы.

В Python интерфейсы не нужны (хоть и есть) т.к. он имеет множественное наследование и вместо интерфейсов можно использовать абстрактные классы.

Модуль zope.interfaces — предоставляет возможность создания интерфейсов.

Other topics