Skip to content

Instantly share code, notes, and snippets.

@majorz
Created April 8, 2013 23:05
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 majorz/5341333 to your computer and use it in GitHub Desktop.
Save majorz/5341333 to your computer and use it in GitHub Desktop.
Name mangling and code repetition - cooperative inheritance use case
class Renderer:
def __init__(self, entity):
self._entity = entity
class IntRenderer(Renderer):
__type = int
def __render_entity(self):
return 'INTEGER {}'.format(self._entity)
def __call__(self):
if isinstance(self._entity, self.__type):
return self.__render_entity()
else:
return super().__call__()
class FloatRenderer(Renderer):
__type = float
def __render_entity(self):
return 'FLOAT {}'.format(self._entity)
def __call__(self):
if isinstance(self._entity, self.__type):
return self.__render_entity()
else:
return super().__call__()
class CompositeRenderer(
IntRenderer,
FloatRenderer,
):
pass
if __name__ == '__main__':
numbers = [10, 4.1, 91.1, 1000]
for number in numbers:
renderer = CompositeRenderer(number)
print(renderer())
'''
OUTPUT:
INTEGER 10
FLOAT 4.1
FLOAT 91.1
INTEGER 1000
'''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment