pythonvirtual-functions

How to implement virtual methods in Python?


I know virtual methods from PHP or Java.

How can they be implemented in Python?

Or have I to define an empty method in an abstract class and override it?


Solution

  • Sure, and you don't even have to define a method in the base class. In Python methods are better than virtual - they're completely dynamic, as the typing in Python is duck typing.

    class Dog:
      def say(self):
        print "hau"
    
    class Cat:
      def say(self):
        print "meow"
    
    pet = Dog()
    pet.say() # prints "hau"
    another_pet = Cat()
    another_pet.say() # prints "meow"
    
    my_pets = [pet, another_pet]
    for a_pet in my_pets:
      a_pet.say()
    

    Cat and Dog in Python don't even have to derive from a common base class to allow this behavior - you gain it for free. That said, some programmers prefer to define their class hierarchies in a more rigid way to document it better and impose some strictness of typing. This is also possible - see for example the abc standard module.