TweetFollow Us on Twitter

Mac in the Shell: Python: Getting OOPy with it

Volume Number: 25
Issue Number: 04
Column Tag: Mac in the Shell

Mac in the Shell: Python: Getting OOPy with it

Or, delving into the real Object-Oriented Programming Features of Python

by Edward Marczak

Introduction

The last several articles have been focusing on Python basics: data types, flow control, modules and more. Plus, the first "Learn Python on the Mac" article pointed out some Mac-specific tweaks needed to enable the built-in help docs. Here, we go a little deeper and talk about creating classes, Python's real Object Oriented Programming (OOP) powerhouse. This article will start to introduce OOP in general, and next month's column will get into Python specifics. Without further delay, let's begin.

Why OOP?

Why OOP, indeed? I went back and forth for some time deciding if this was the right time to introduce the topic. There are plenty of other subjects relating to Python that I still haven't addressed. One can write perfectly competent, purely procedural Python programs without ever touching OOP directly. However, understanding OOP and having the class mechanism at your disposal is incredibly powerful. Also, if you ever want to get into GUI applications using Python as the language underneath, the ability to write classes is essential. Finally, those 'other topics' that I mentioned will come along in later articles, so, it will be good to get OOP into your brain sooner rather than later.

Essentially, classes are just another namespace packaging mechanism in Python. Typically, they provide a generic model of a real-world object. Classes promote reusability, and can cut development time. If you're coming to Python from C++ or Java, you're in for a surprise: classes in Python do away with some of the pomp and circumstance found in those languages. Like most things in Python, they're straightforward and easy to understand.

Objects

I've talked a lot about objects in Python in previous article, but we haven't really defined what that means. In one sense, you're using objects in Python if you know it or not. Python generically treats everything as an internal object. For example, when you make the assignment 'x = 'hello', x "is a" string object. On a more pedantic level, though, objects mean several things.

Model Factory

When you define a class, the class itself doesn't really do much. It acts as a model for instantiated objects. It's a factory that can churn out objects based on the namespace it contains.

Inheritance

Classes can inherit methods and objects from other classes.

Extending and Overloading

Related to inheritance, objects can then extended an inherited class by adding new attributes and methods, or, override an attribute or method of the class it inherits from. Extending adds new behavior to the class. Overriding-also called overloading-changes the behavior of the method or class.

It all comes down to the dot operator, which we've been using all along to access module attributes and to call object methods (like a string method to strip whitespace). We've also talked a bit about namespaces. The subtlety behind the dot notation is that it forces python to perform an upward search, through the inheritance tree of namespaces. How does this work?

Last month, we talked about modules, and we can use that initially to illustrate. Take the following example:

#!/usr/bin/env python
x = 5
y = 7
def ModuleA():
  x = 12
  print 'In ModuleA'
  print x
  print y
print 'Main'
print x
ModuleA()

As you may expect, running this short program gives the following output:

Main
5
In ModuleA
12
7

Obvious? Perhaps. The main routine is asked to print x, finds x in its own namespace and does so. Then, we call ModuleA(), which first sets x, and is then asked to print x. Well, at this point, there are two x variables. So, the print statement in ModuleA() starts a search-from the bottom up-to locate x. It first looks in its own namespace, and finds x. Its own version of x, that is, and prints it. ModuleA() is then asked to print y. It again starts a search. Since it doesn't find y in its own namespace, it looks in the namespace directly above it. It finds y there and stops the search.

Note that in the above paragraph, it all comes back to namespaces. In fact, this search-though-the-namespace is initiated any time we use the dot operator in the object.attribute form.

It's all about the dot

As mentioned above, a class is just another Python mechanism of packaging up a namespace. Here's a simple Python class:

class ClassA():
  a = 5
  b = 7

Now, a slightly dirty secret is that a class really is just a namespace package, and we don't even have to instantiate it:

print ClassA.a

will do what you expect and print "5". You can even make further assignments:

ClassA.c = 9
print ClassA.c

Treating a class as a generic, function-like namespace sells the class mechanism a little short, though. Classes have the power to inherit attributes from other classes. Let's define another class:

class ClassB(ClassA):
  b = 44
  c = 88

In this case, ClassB inherits from ClassA. Essentially, all of the attributes from ClassA are copied into ClassB on creation. Let's instantiate three objects to illustrate:

inst_a = ClassA()
inst_b = ClassB()
inst_c = ClassA()

Note that both inst_a and inst_c are instances of ClassA. Each object has a variable a in its namespace:

print inst_a.a
print inst_b.a
print inst_c.a
5
5
5

When inst_b is instantiated, ClassB inherits from ClassA. This is why ClassB has an 'a' variable in its namespace. Figure 1 shows this graphically.


Figure 1: Class inheritance

When ClassB() is asked about variable 'a', it first searches its namespace. Not finding it, the search continues in the class it inherited from-also called its superclass-and the variable is found. We can alter these variables in our instance simply:

inst_b.a = 99
print inst_b.a

This will print 99, as you'd expect. However, it is only changed in the instance, not up the chain:

print ClassB.a
...prints '5'.

Conclusion

Creating an elegant object-oriented program takes some planning. That may be one of the key differences between a straight procedural based program, and an OOP-based one. OOP lets you be a bit more strategic. It also lets you build a larger app based on smaller, reusable objects. Next month, we'll dig into details and implementation a bit more.

Media of the month: "No Line On The Horizon" by U2. Now, this may be an obvious choice, a safe choice, or a polarizing choice. U2 has become pretty palatable to a broad audience these days. If you're one of those people that never gave them a shot, this is actually a decent album to start with.


Ed Marczak is the Executive Editor of MacTech Magazine. He lives in New York with his wife, two daughters and various pets. He has been involved with technology since Atari sucked him in, and has followed Apple since the Apple I days. He spends his days on the Mac team at Google, and free time with his family and/or playing music. Ed is the author of the Apple Training Series book, "Advanced System Administration v10.5," and has written for MacTech since 2004.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Ys Chronicles II (Games)
Ys Chronicles II 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: After a hard fight to recover the six sacred books in Ys Chronicles I, Adol is back for a sequel! | Read more »
FINAL FANTASY Ⅸ (Games)
FINAL FANTASY Ⅸ 1.0.4 Device: iOS Universal Category: Games Price: $16.99, Version: 1.0.4 (iTunes) Description: ==========●Special sale price for the FINAL FANTASY IX release! ●20% off from February 10 to February 21, 2016... | Read more »
Tennis Club Story (Games)
Tennis Club Story 1.03 Device: iOS Universal Category: Games Price: $4.99, Version: 1.03 (iTunes) Description: Aim for the ace position of tennis club prestige in this simulation! Your leadership decides if players make it to the big... | Read more »
Juggernaut Wars guide - How to use skill...
Juggernaut Warsis a brand new auto-RPG on iOS and Android that challenges you to build a team of heroes, send them out into various different missions to defeat waves of heroes, and level them up to increase their power. The actual combat itself... | Read more »
Check out the new Pirate Attack update i...
Love pirates and board games? Well, you'll love the new Pirate Attack themed update that just launched in Game of Dice. It adds a bunch of new content themed around pirates, like an all new event map based on a pirate ship which revamps the toll... | Read more »
Splash Cars guide - How to paint the tow...
Splash Cars is an arcade driving game that feels like a hybrid between Dawn of the Plow and Splatoon. In it, you'll need to drive a car around to repaint areas of a town that have lost all of their color. Check out these tips to help you perform... | Read more »
The best video player on mobile
We all know the stock video player on iOS is not particularly convenient, primarily because it asks us to hook a device up to iTunes to sync video in a world that has things like Netflix. [Read more] | Read more »
Four apps to help improve your Super Bow...
Super Bowl Sunday is upon us, and whether you’re a Panthers or a Broncos fan you’re no doubt gearing up for it. [Read more] | Read more »
LooperSonic (Music)
LooperSonic 1.0 Device: iOS Universal Category: Music Price: $4.99, Version: 1.0 (iTunes) Description: LooperSonic is a multi-track audio looper and recorder that will take your loops to the next level. Use it like a loop pedal to... | Read more »
Space Grunts guide - How to survive
Space Grunts is a fast-paced roguelike from popular iOS developer, Orange Pixel. While it taps into many of the typical roguelike sensibilities, you might still find yourself caught out by a few things. We delved further to find you some helpful... | Read more »

Price Scanner via MacPrices.net

Apple refurbished 15-inch Retina MacBook Pros...
Apple has Certified Refurbished 2015 15″ Retina MacBook Pros available for up to $380 off the cost of new models. An Apple one-year warranty is included with each model, and shipping is free: - 15″ 2... Read more
BookBook For iPad Pro Coming Soon
The iPad Pro is a device unlike any other, and with Apple Pencil, it’s the ideal portable sketchpad: all that’s missing is the modern easel and portfolio to go. TwelveSouth’s BookBook for iPad Pro... Read more
12-inch 1.2GHz Silver Retina MacBook on sale...
B&H Photo has the 12″ 1.2GHz Silver Retina MacBook on sale for $1399 including free shipping plus NY sales tax only. Their price is $200 off MSRP, and it’s the lowest price for this model from... Read more
iPads on sale at Target: $100 off iPad Air 2,...
Target has WiFi iPad Air 2s and iPad mini 4s on sale for up to $100 off MSRP on their online store for a limited time. Choose free shipping or free local store pickup (if available). Sale prices for... Read more
Target offers Apple Watch for $100 off MSRP
Target has Apple Watches on sale for $100 for a limited time. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store prices may vary: - Apple... Read more
Apple refurbished 2014 13-inch Retina MacBook...
Apple has Certified Refurbished 2014 13″ Retina MacBook Pros available for up to $400 off original MSRP, starting at $979. An Apple one-year warranty is included with each model, and shipping is free... Read more
Macs available for up to $300 off MSRP, $20 o...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free, and... Read more
Watch Super Bowl 50 Live On Your iPad For Fre...
Watch Super Bowl 50 LIVE on the CBS Sports app for iPad and Apple TV. Get the app and then tune in Sunday, February 7, 2016 at 6:30 PM ET to catch every moment of the big game. The CBS Sports app is... Read more
Two-thirds Of All Smart Watches Shipped In 20...
Apple dominated the smart watch market in 2015, accounting for over 12 million units and two-thirds of all shipments according to Canalys market research analysts’ estimates. Samsung returned to... Read more
12-inch 1.2GHz Retina MacBooks on sale for up...
B&H Photo has 12″ 1.2GHz Retina MacBooks on sale for $180 off MSRP. Shipping is free, and B&H charges NY tax only: - 12″ 1.2GHz Gray Retina MacBook: $1499 $100 off MSRP - 12″ 1.2GHz Silver... Read more

Jobs Board

*Apple* System Analyst - ATOS IT Services...
Apple System AnalystReference no.198783CountryUSARegionUS - CALIFORNIACityUS - CALIFORNIA - BURBANKPosition TypeProfessionalJob AreaIT SupportJob TypeFull Read more
*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Subject Matter Expert - Experis (Uni...
This position is for an Apple Subject Matter Expert to assist in developing the architecture, support and services for integration of Apple devices into the domain. Read more
*Apple* Macintosh OSX - Net2Source Inc. (Uni...
…: * Work Authorization : * Contact Number(Best time to reach you) : Skills : Apple Macintosh OSX Location : New York, New York. Duartion : 6+ Months The associate would Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.