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

NetNewsWire 4.0.0 - RSS and Atom news re...
NetNewsWire is the best way to keep up with the sites and authors you read most regularly. Let NetNewsWire pull down the latest articles, and read them in a distraction-free and Mac-like way. Native... Read more
MacUpdate Desktop 6.0.6 - Search and ins...
MacUpdate Desktop 6 brings seamless 1-click installs and version updates to your Mac. With a free MacUpdate account and MacUpdate Desktop 6, Mac users can now install almost any Mac app on macupdate.... Read more
ForkLift 2.6.5 - Powerful file manager:...
ForkLift is a powerful file manager and ferociously fast FTP client clothed in a clean and versatile UI that offers the combination of absolute simplicity and raw power expected from a well-executed... Read more
Drive Genius 4.1.0 - Powerful system uti...
Drive Genius 4 gives you faster performance from your Mac while also protecting it. The award-winning and improved DrivePulse feature alerts you to hard drive issues before they become major problems... Read more
OnyX 2.9.7 - Maintenance and optimizatio...
OnyX is a multifunctional utility for OS X. It allows you to verify the startup disk and the structure of its System files, to run miscellaneous tasks of system maintenance, to configure the hidden... Read more
DEVONthink Pro 2.8.5 - Knowledge base, i...
DEVONthink Pro is your essential assistant for today's world, where almost everything is digital. From shopping receipts to important research papers, your life often fills your hard drive in the... Read more
Backblaze 4.0.1.878 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac.With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more
Apple Remote Desktop Client 3.8.4 - Clie...
Note: Apple Remote Desktop Client is available only through Software Update (the Updates tab in App Store.app. Apple Remote Desktop Client is the best way to manage the Mac computers on your network... Read more
Merlin Project 3.0.7.39619 - Project man...
Merlin Project is for those of you who are responsible for complex projects. Simple lists of tasks won't suffice. Good planning raises questions about the dependencies of activities on each other,... Read more
Tidy Up 4.1.0 - Find duplicate files and...
Tidy Up is a complete duplicate finder and disk-tidiness utility. With Tidy Up you can search for duplicate files and packages by the owner application, content, type, creator, extension, time... Read more

Carbo - Handwriting in the Digital Age...
Carbo - Handwriting in the Digital Age 1.0 Device: iOS Universal Category: Productivity Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
The Apple Watch isn't Great as a Fi...
| Read more »
Show the World What You See With Stre.am...
Live broadcasting is getting popular on mobile devices, which is why you can now get Stre.am, by Infinite Takes. [Read more] | Read more »
PhotoTime's 2.1 Update Adds Apple W...
The latest PhotoTime update is adding even more functionality to the handy photo organizing app. Yep, including Apple Watch support. [Read more] | Read more »
Oh My Glob! Adventure Time Puzzle Quest...
Finn and Jake are taking over D3 Go!'s popular puzzle game series in the upcoming Adventure Time Puzzle Quest. [Read more] | Read more »
Earthcore: Shattered Elements - Tips, Tr...
At first glance, Earthcore: Shattered Elements seems like a rather simple card-battling game. Once you’re introduced to skills that will change quite a bit. Even more so once you start to acquire hero cards. But it’s not so complicated that we... | Read more »
Dungeon999F (Games)
Dungeon999F 1.33 Device: iOS Universal Category: Games Price: $.99, Version: 1.33 (iTunes) Description: "The game you must play at least once in your life!" "The game with potential of million downloads globally!" ...is what the... | Read more »
Mixels Rush - Use Mixes, Maxes and Murps...
Mixels Rush - Use Mixes, Maxes and Murps to Outrun the Nixels 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: Use awesome new Mixels and make crazy combinations to beat the annoying... | Read more »
Battles of the Ancient World II (Games)
Battles of the Ancient World II 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Sword Of Xolan (Games)
Sword Of Xolan 1.0.4 Device: iOS Universal Category: Games Price: $.99, Version: 1.0.4 (iTunes) Description: Sword of Xolan is an action platformer game that includes the juice of pixel art style. Xolan is a young and brave man who... | Read more »

Price Scanner via MacPrices.net

Sale! 16GB iPad mini 3 for $349, save $50
B&H Photo has the 16GB iPad mini 3 WiFi on sale for $349 including free shipping plus NY sales tax only. Their price is $50 off MSRP, and it’s the lowest price available for this model. Read more
Price drop on 2014 15-inch Retina MacBook Pro...
B&H Photo has dropped prices on 2014 15″ Retina MacBook Pros by $200. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1799.99 save $200 - 15″ 2.5GHz... Read more
Will iOS 9 Finally Bring Productivity Friendl...
Ah, the irony. From its original announcement in 2010, Apple has doggedly insisted that the iPad remain “simple,” thus arbitrarily limiting its considerable potential as a content creation and... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
The Apple Store has Apple Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.... Read more
Mac Pros on sale for up to $260 off MSRP
B&H Photo has Mac Pros on sale for up to $260 off MSRP. Shipping is free, and B&H charges sales tax in NY only: - 3.7GHz 4-core Mac Pro: $2799, $200 off MSRP - 3.5GHz 6-core Mac Pro: $3719.99... Read more
Save up to $600 with Apple refurbished Mac Pr...
The Apple Store has Apple Certified Refurbished Mac Pros available for up to $600 off the cost of new models. An Apple one-year warranty is included with each Mac Pro, and shipping is free. The... Read more
Apple drops price on refurbished 15-inch 2.2G...
The Apple Store has dropped their price on the Apple Certified Refurbished 2014 15″ 2.2GHz Retina MacBook Pro to $1609, $390 off original MSRP. Apple’s one-year warranty is included, and shipping is... Read more
Apple restocks refurbished Mac minis for up t...
The Apple Store has restocked Apple Certified Refurbished 2014 Mac minis, with models available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz... Read more
Cover For iPhone Helps You Create Beautiful P...
Taking photos, editing and sharing them is one of the things most of people do on their iPhones for fun, especially if they’re users of social media. Unfortunately, many iOS photo-editing solutions... Read more
Password Keyboard 1.0 For iOS Handles Logins...
Pfaeffikon, Switzerland based Power APP has introduced Password Keyboard 1.0.0, their new password utility developed for iPhone, iPad and iPod touch devices. Password Keyboard is designed to simplify... Read more

Jobs Board

Project Manager / Business Analyst, WW *Appl...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
Visual Merchandise Manager %u2013 Accessories...
…to be part of an incredible team. Imagine what you could do here. At Apple , great ideas have a way of becoming reality very quickly. Our Accessories assortment makes Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** The ASC is an Apple employee who serves as the Apple business manager and influencer in a hyper-business critical Reseller's store which delivers Read more
Technical Project Manager - *Apple* Pay - A...
**Job Summary** Apple Pay is seeking an experienced technical PM…manage the rollout of features to merchants for the Apple Pay platform in the US Within this role Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.