[Tutor] Usefulness of classes and necessity of inheriting classes

Alan Gauld alan.gauld at btinternet.com
Mon Nov 25 12:11:44 CET 2013


On 25/11/13 06:37, Reuben wrote:

> Question no 1:
> ----------------------
> I would like to know why do we actually inherit classes? What would be
> the benefit of inheriting?

Inheritance is the key to providing polymorphism. It also saves a lot of 
duplication in that a new class only has to implement those methods that 
differ from the ones in the inherited class.

See the BankAccount examples in my OOP tutorial topic for examples of this.

> If possible, a practical example would be of great help

Real world examples include widgets in a GUI.
You can have a Button widget which does all the standard button type things.
You might then want a special button that flashes while an operation is 
in progress. You therefore define a new button class inheriting from the 
regular button. You only need to implement the display code, the code 
that responds to mouse clicks etc is all inherited from the standard.

Another case in in Network management. Network management systems
use what is called a MIB. A Management Information Base. The MIB
is usually defined in terms of Managed Objects(MO). There is a
standard protocol (a set of methods or API) that all MOs must
adhere to. Specific types of network  elements (routers,
switches, printers etc) all have their own specialist
methods/features on top of the standard MO protocol. Specific
models of router or printer will then have their own
proprietary features on top of that again. So a MIB will
typically have a deep inheritance stricture starting with MO,
then a layer of generic devices(router, switch, printer etc)
then a third layer of manufacturers models (eg. Cisco5300,
HP Deskjet 4550, etc)

When we come to add a new model of printer, say, to the MIB
we want to minimize the coding so we inherit the generic printer
object which will give us the generic MO protocol methods
plus the generic printer features (out of paper/ink alarms etc)
for free. We then implement the special features of that model 
(blue-tooth connection opened, banner printing mode selected
etc). By only having to code the differences it is much easier
to add new objects.

> Question no 2:
> ----------------------
>
> Why would I ever use a class? I understand this is strange question
>
> May be an example to make me understand would be useful.
>
> Or may be answering the question should be rephrased as "Why not use
> modules instead of classes?"

Modules only allow for one instance. All the data fields in a module are 
shared between users. A class is like a new data type. You can have as 
many instances as you like and each one will have its own attributes.

Think of the GUI Button class. A typical GUI screen with have several 
Buttons ('Save', "Don't Save", "Cancel" for example) Each of those 
buttons has a different piece of code linked to it and a different 
label, but they are all  Buttons. If we just had a Button module we 
would need to hold all the data about each button locally in our code 
and then pass all of it into each function every time we used it. (And 
that includes things like screen location, size, font, colors, borders, 
state, etc etc) It's perfectly possible to do that (it's what we did 
before OOP became popular) but it's very tedious, and error prone.

And of course you can't inherit from Modules!

However, it is important to say that you don't need to use classes.
They are powerful tools, especially where you need to reuse code across 
projects and in organizing larger projects. But Python modules do a lot 
of the same things and in smaller projects are often sufficient.

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list