How do I implement interfaces in python?


public interface IInterface
    void show();

 public class MyClass : IInterface

    #region IInterface Members

    public void show()
        Console.WriteLine("Hello World!");


How do I implement Python equivalent of this C# code ?

class IInterface(object):
    def __init__(self):

    def show(self):
        raise Exception("NotImplementedException")

class MyClass(IInterface):
   def __init__(self):

   def show(self):
       print 'Hello World!'

Is this a good idea?? Please give examples in your answers.

11/22/2017 8:56:11 PM

Accepted Answer

As mentioned by other here:

Interfaces are not necessary in Python. This is because Python has proper multiple inheritance, and also ducktyping, which means that the places where you must have interfaces in Java, you don't have to have them in Python.

That said, there are still several uses for interfaces. Some of them are covered by Pythons Abstract Base Classes, introduced in Python 2.6. They are useful, if you want to make base classes that cannot be instantiated, but provide a specific interface or part of an implementation.

Another usage is if you somehow want to specify that an object implements a specific interface, and you can use ABC's for that too by subclassing from them. Another way is zope.interface, a module that is a part of the Zope Component Architecture, a really awesomely cool component framework. Here you don't subclass from the interfaces, but instead mark classes (or even instances) as implementing an interface. This can also be used to look up components from a component registry. Supercool!

11/17/2017 1:49:41 PM

Using the abc module for abstract base classes seems to do the trick.

from abc import ABCMeta, abstractmethod

class IInterface:
    __metaclass__ = ABCMeta

    def version(self): return "1.0"
    def show(self): raise NotImplementedError

class MyServer(IInterface):
    def show(self):
        print 'Hello, World 2!'

class MyBadServer(object):
    def show(self):
        print 'Damn you, world!'

class MyClient(object):

    def __init__(self, server):
        if not isinstance(server, IInterface): raise Exception('Bad interface')
        if not IInterface.version() == '1.0': raise Exception('Bad revision')

        self._server = server

    def client_show(self):

# This call will fail with an exception
    x = MyClient(MyBadServer)
except Exception as exc:
    print 'Failed as it should!'

# This will pass with glory

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow