It's so tempting when writing a simple training example to get excited and add lots of features - so that you then end up with an example that's anything but a simple training example!
Here's an example - just about my shortest and simplest ever - that shows a base class, a subclass, inheritance, polymorphism, and a test harness all in a single page of Python:
class pet(object):
def __init__(current,name,age,weight,dailytins):
current.tinnies = dailytins
current.name = name
current.age = age
current.weight = weight * 2.2
def getfood(self,days):
return float(self.tinnies * days)
def __str__(this):
return "Woof says " + this.name
class dog(pet):
pass
class cat(pet):
def __str__(this):
return "Miaow says " + this.name
if __name__ == "__main__":
team = [dog("Gypsy",5,36,3),dog("Billy",3,32,3.5), \
cat("Charlie",15,2,0.33)]
for hound in team:
tins = hound.getfood(7)
print str(hound),"will eat",tins,"tins"
With comments too - and sample output - you'll find that
[here].
There's a further example in the course notes, but oen which splits the application into separate files for each class. Whether you want to keep classes together in groups of to separate them depends on if they're going to be:
a) distributed together
b) maintained by the same person
c) updated on the same cycle
d) used with each other in applications
and if you can answer yes, yes, yes and yes ... then you should consider looking after / maintaining them in one unit.
The source code for the split example is
[here] for the main test program
[here] for the first subclass
[here] for the second subclass
[here] for the base class
and there's some sample data
[here].
Next Python course - next month. See
[here].
(written 2013-03-04)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y116 - Python - Applying OO design techniques and best practise [340] Code and code maintainance efficiency - (2005-06-08)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[668] Python - block insets help with documentation - (2006-04-04)
[836] Build on what you already have with OO - (2006-08-17)
[945] Code quality counts - (2006-11-26)
[1181] Good Programming practise - where to initialise variables - (2007-05-09)
[2363] Alpaca Case or Camel Case - (2009-08-16)
[2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
[2485] How do I set up a constant in Python? - (2009-10-31)
[2523] Plan your application before you start - (2009-12-02)
[2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[4118] We not only teach PHP and Python - we teach good PHP and Python Practice! - (2013-06-18)
[4359] How to avoid too many recalculations within an object - (2014-12-21)
[4718] Defining an object that is a modified standard type in Python - (2016-11-02)
Y112 - Python - Objects - Intermediate [296] Using a Python dictionary as a holder of object attributes - (2005-04-30)
[383] Overloading of operators on standard objects in Python - (2005-07-19)
[477] Class, static and unbound variables - (2005-10-25)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[903] Pieces of Python - (2006-10-23)
[964] Practical polymorphism in action - (2006-12-04)
[1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
[1217] What are factory and singleton classes? - (2007-06-04)
[1517] Python - formatting objects - (2008-01-24)
[1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
[1661] Equality, sameness and identity - Python - (2008-05-31)
[1819] Calling base class constructors - (2008-10-03)
[2368] Python - fresh examples of all the fundamentals - (2009-08-20)
[2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
[2693] Methods that run on classes (static methods) in Python - (2010-03-25)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2720] Multiple inheritance in Python - complete working example - (2010-04-14)
[2722] Mixins example in Python - (2010-04-14)
[2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
[2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
[2889] Should Python classes each be in their own file? - (2010-07-27)
[2905] Defining static methods in Python - (2010-08-05)
[2994] Python - some common questions answered in code examples - (2010-10-10)
[3002] A list of special method and attribute names in Python - (2010-10-17)
[3442] A demonstration of how many Python facilities work together - (2011-09-16)
[3472] Static variables in functions - and better ways using objects - (2011-10-10)
[3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[4094] Python Properties - how and why - (2013-05-18)
[4344] Python base and inherited classes, test harness and unit testing - new examples - (2014-12-07)
[4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
[4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
[4410] A good example of recursion - a real use in Python - (2015-02-01)
[4449] Spike solution, refactoring into encapsulated object methods - good design practise - (2015-03-05)
[4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
[4541] Setting up and tearing down with the Python with keyword - (2015-10-16)
[4649] Object and Static methods - what is the difference; example in Python 3 - (2016-02-17)
[4717] with in Python - examples of use, and of defining your own context - (2016-11-02)
[4719] Nesting decorators - (2016-11-02)
Y106 - Object Oriented Python [834] Python makes University Challenge - (2006-08-15)
[900] Python - function v method - (2006-10-20)
[1306] Python class rattling around - (2007-08-16)
[1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[2017] Python - a truly dynamic language - (2009-01-30)
[2169] When should I use OO techniques? - (2009-05-11)
[3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
[3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
[3436] Moving from scripting to Object Orientation in Python - (2011-09-13)
[3673] Object oriented or structured - a comparison in Python. Also writing clean regular expressions - (2012-03-26)
[3878] From Structured to Object Oriented Programming. - (2012-10-02)
[3947] this or self - what are they, and what is the difference? (Python) - (2012-12-08)
[4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
[4129] Simple OO demonstration in C++, comparison to Python - (2013-07-01)
[4448] What is the difference between a function and a method? - (2015-03-04)
[4591] From single block to structure and object oriented programming - (2015-12-02)
[4650] Why populate object with values as you construct them? - (2016-02-18)
[4721] When to check an object type - Python isinstance example - (2016-11-03)
Some other Articles
Easier public transport from Melksham to Bristol AirportShowing what programming errors look like - web site pitfallWhat is on OUR pond?Exception, Lambda, Generator, Slice, Dict - examples in one Python programReally Simple Class and Inheritance example in PythonCollections in Python - list tuple dict and string.The coffee of the Stars comes to MelkshamBackups, Codebase, Strategy and more - dealing with forum incidentsSQL databases from Python - an SQLite exampleMelksham to Chippenham (Station) bus services - times and routes