An interface, for an object, is a set of methods and attributes on that object.
In Python, we can use an abstract base class to define and enforce an interface.
For example, say we want to use one of the abstract base classes from the collections module:
If we try to use it, we get an TypeError because the class we created does not support the expected behavior of sets:
"""Alternate set implementation favoring space over speed
and not requiring the set elements to be hashable.
def __init__(self, iterable):
self.elements = lst = 
for value in iterable:
if value not in lst:
def __contains__(self, value):
return value in self.elements
s1 = ListBasedSet('abcdef')
s2 = ListBasedSet('defghi')
overlap = s1 & s2
There are other things we could do with this, like register virtual subclasses that already implement these interfaces, but I think that is beyond the scope of this question. The other methods demonstrated here would have to adapt this method using the abc module to do so, however.