Skip to content

Instantly share code, notes, and snippets.

@jbking
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbking/eb1c1ea1425ac59bbce4 to your computer and use it in GitHub Desktop.
Save jbking/eb1c1ea1425ac59bbce4 to your computer and use it in GitHub Desktop.
Check Python Inheritance Behavior
$ python inheritance.py
At SuperClass.echo: SuperClass
----------
Before calling super at AClass.echo: AClass
At SuperClass.echo: AClass
After calling super at AClass.echo: AClass
----------
Before calling super at BClass.echo: BClass
At SuperClass.echo: BClass
After calling super at BClass.echo: BClass
----------
Before calling super at CClass.echo: CClass
Before calling super at AClass.echo: CClass
Before calling super at BClass.echo: CClass
At SuperClass.echo: CClass
After calling super at BClass.echo: CClass
After calling super at AClass.echo: CClass
After calling super at CClass.echo: CClass
from __future__ import print_function
class SuperClass(object):
@classmethod
def echo(cls):
print('At SuperClass.echo: ', cls.__name__)
class AClass(SuperClass):
@classmethod
def echo(cls):
print('Before calling super at AClass.echo: ', cls.__name__)
super(AClass, cls).echo()
print('After calling super at AClass.echo: ', cls.__name__)
class BClass(SuperClass):
@classmethod
def echo(cls):
print('Before calling super at BClass.echo: ', cls.__name__)
super(BClass, cls).echo()
print('After calling super at BClass.echo: ', cls.__name__)
class CClass(AClass, BClass):
@classmethod
def echo(cls):
print('Before calling super at CClass.echo: ', cls.__name__)
super(CClass, cls).echo()
print('After calling super at CClass.echo: ', cls.__name__)
SuperClass.echo()
print('-' * 10)
AClass.echo()
print('-' * 10)
BClass.echo()
print('-' * 10)
CClass.echo()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment