"""
Why use Abstract Base Classes?
==============================

1. Abstract base classes are a form of interface checking more strict than individual hasattr()
checks for particular methods.

2. By defining an abstract base class, you can define a common API for
 a set of subclasses.

3. This capability is especially useful in situations where a third-party is going
 to provide implementations, such as with plugins to an application,

4. but can also aid you when
 working on a large team or with a large code-base where keeping all classes in your head at the
 same time is difficult or not possible.


How ABCs Work ?
==============

abc works by marking methods of the base class as abstract,
and then registering concrete classes as implementations of the abstract base.
If your code requires a particular API, you can use issubclass() or isinstance()
 to check an object against the abstract class.




"""

import abc

class AbstractBase(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def load(self, input):
        """Retrieve data from the input source and return an object."""
        return

    @abc.abstractmethod
    def save(self, output, data):
        """Save the data object to the output."""
        return

