"If you find yourself repeating a piece of code, there must be an easier way" But what if you have a number of similar but not identical items / things / objects?
If the things that change between each of your objects are just data values - for example the number and ages of childen - then you can handle the differences with parameters. If the things that change also require a logic change, you
might use conditional statements such as
if within your logic ... or if the changes are significant - a lot of them, and / or changing big blocks of code - you may choose to use a whole set of related object types.
Here's how it works:
• Code which is common to all your objects in a group goes into a
base class
• Code which is type specific goes into a
sub class which you declare to originate from (and thus inherit code from) the base class.
There's a practical example of that in use
[here] from yesterday's
Python course
- My base class is
transport; it has two subclasses
bus and
train
- Common code (departure times, destination towns) are in the tranport base class
- Varying code (working out the capacity) is defined with different algorihms in bus and train subclasees
- Where there is a lot of common code within code in the subclass (but also variations), my subclass methods call another method that's shared in the base class.
(written 2015-03-05)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
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)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[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)
[2485] How do I set up a constant in Python? - (2009-10-31)
[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)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
[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)
[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)
[4718] Defining an object that is a modified standard type in Python - (2016-11-02)
[4719] Nesting decorators - (2016-11-02)
Q909 - Object Orientation and General technical topics - Object Orientation: Composite Objects [592] NOT Gone phishing - (2006-02-05)
[1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
[1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[3142] Private and Public - and things between - (2011-01-22)
[3152] Jargon busting - (2011-01-30)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[3979] Extended and Associated objects - what is the difference - C++ example - (2013-01-18)
[4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
[4394] Philosophy behind object design - and how I applied in to a Java example - (2015-01-14)
Some other Articles
Everything is a string - even a listTcl variable names - no real limits!Binary data handling - Python and PerlRunning an operating system command from your Python program - the new way with the subprocess moduleDeciding whether to use parameters, conditional statements or subclassesWhat is the difference between a function and a method?Overnight accommodation in Melksham - if Well House Manor is full!Combining tests into suites, and suites into bigger suites - Python and unittestGraphing presentations in Python - huge data, numpy and matplotlib