How to implement virtual methods in Python?

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.

Leave a Comment