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

Adobe Acrobat Reader 20.012.20048 - View...
Adobe Acrobat Reader allows users to view PDF documents. You may not know what a PDF file is, but you've probably come across one at some point. PDF files are used by companies and even the IRS to... Read more
Adobe Acrobat DC 20.012.20048 - Powerful...
Acrobat DC is available only as a part of Adobe Creative Cloud, and can only be installed and/or updated through Adobe's Creative Cloud app. Adobe Acrobat DC with Adobe Document Cloud services is... Read more
Box Sync 4.0.8009 - Online synchronizati...
Box Sync gives you a hard-drive in the Cloud for online storage. Note: You must first sign up to use Box. What if the files you need are on your laptop -- but you're on the road with your iPhone? No... Read more
Daylite 2020.36.1 - Dynamic business org...
Daylite helps businesses organize themselves with tools such as shared calendars, contacts, tasks, projects, notes, and more. Enable easy collaboration with features such as task and project... Read more
Catalina Cache Cleaner 15.0.6 - Clear ca...
Catalina Cache Cleaner is an award-winning general-purpose tool for macOS X. CCC makes system maintenance simple with an easy point-and-click interface to many macOS X functions. Novice and expert... Read more
Final Cut Pro X 10.4.10 - Professional v...
Final Cut Pro X is a professional video editing solution. Completely redesigned from the ground up, Final Cut Pro adds extraordinary speed, quality, and flexibility to every part of the post-... Read more
Civilization VI 1.3.4 - Next iteration o...
Civilization® VI is the award-winning experience. Expand your empire across the map, advance your culture, and compete against history’s greatest leaders to build a civilization that will stand the... Read more
iTubeDownloader 6.5.23 - Easily download...
iTubeDownloader is a powerful-yet-simple YouTube downloader for the masses. Because it contains a proprietary browser, you can browse YouTube like you normally would. When you see something you want... Read more
iMovie 10.1.16 - Edit personal videos an...
With an all-new design, Apple iMovie lets you enjoy your videos like never before. Browse your clips more easily, instantly share your favorite moments, and create beautiful HD movies and Hollywood-... Read more
macOS Catalina 10.15.7 - An Operating Sy...
macOS Catalina gives you more of everything you love about Mac. Experience three all-new media apps: Apple Music, Apple TV, and Apple Podcasts. Locate a missing Mac with the new Find My app. And now... Read more

Latest Forum Discussions

See All

Distract Yourself With These Great Mobil...
There’s a lot going on right now, and I don’t really feel like trying to write some kind of pithy intro for it. All I’ll say is lots of people have been coming together and helping each other in small ways, and I’m choosing to focus on that as I... | Read more »
BTS Universe Story, the social game that...
Netmarble's highly anticipated social game, BTS Universe Story, is available now for iOS and Android. It's the second collaboration between the hugely successful mobile developer and the K-pop superstars following BTS World. [Read more] | Read more »
The 5 Best Mobile Games Like Hades
Supergiant Games finally released Hades upon the world this week, and we’re loving it. The game plays to all of the studio’s strengths while still retaining a strong sense of identity. It also just so happens to play rather well using the Steam... | Read more »
A Year of Apple Arcade: The Good, The Ba...
Apple Arcade has persisted for just over a year at this point, and although that means I've been busy ranking and re-ranking every game on the service for just about as long, I haven't done much reflection on the service as a whole. [Read more] | Read more »
Animal Restaurant anniversary event team...
Animal idle simulator Animal Restaurant is celebrating its first-year anniversary with a crossover event with popular YouTube series Aaron’s Animals. [Read more] | Read more »
Raziel: Dungeon Arena is a hack 'n...
Raziel: Dungeon Arena is available now on mobile and will appeal to fans of both comic books and old school dungeon crawlers. Not only will you hack 'n' slash your way through mobs of enemies but there's also fully-narrated animated comic to enjoy... | Read more »
Steam Link Spotlight - Hades
Steam Link Spotlight is a feature where we look at PC games that play exceptionally well using the Steam Link app. Our last entry was on Disco Elysium. Read about how it plays using Steam Link over here. | Read more »
Microsoft has acquired ZeniMax Media and...
In the latest of a series of blockbuster moves, Microsoft has now acquired Zenimax Media and its subsidiary, Bethesda Softworks, for $7.5 billion. [Read more] | Read more »
Infinity Mechs is an upcoming idle game...
Indie developer SkullStar studio has announced an upcoming idle mech game called Infinity Mechs. It draws inspiration from the mobile game Iron Saga and has been officially licensed by Game Duchy. It's set to launch for both iOS and Android on... | Read more »
PUBG Mobile Lite's latest update se...
PUBG Mobile Lite, the streamlined version of the popular battle royale that's designed to work on less powerful devices, sees the return of a popular game variant today, Survive Till Dawn mode. It arrives as part of the 0.19.0 content update. [... | Read more »

Price Scanner via MacPrices.net

Clearance 8-core iMac Pro available for $3819...
Apple has Certified Refurbished, clearance, 27″ 3.2GHz 8-Core iMac Pros available $3819 including free shipping. Their price is $1180 off the original MSRP of new models. A standard Apple one-year... Read more
How The Upcoming Mac Transition To Apple Sili...
FEATURE: 09.25.20 – Apple’s plan to transition all of its desktop and notebook computers away from Intel processors to Apple silicon, chips designed by the company itself, has been eclipsed by the... Read more
New low price! Apple Watch SE for only $269
B&H Photo is reporting limited stock of Apple’s new Apple Watch SE GPS models for $10 off MSRP and including free shipping. Their $269 price for the 40mm model is the lowest price we’ve seen so... Read more
Lowest price anywhere: New 13″ 2.0GHz MacBook...
Amazon has new 2020 13″ 2.0GHz/512GB MacBook Pros with 10th generation Intel processors back in stock on sale today for $200 off Apple’s MSRP. Shipping is free. Be sure to purchase the MacBook Pro... Read more
Apple Pro Display XDR with Nano-Texture Glass...
Amazon Apple Premier Partner GatorTec has the Apple Pro Display XDR with Nano-Texture Glass on sale for $5599 shipped, on Amazon. Their price is $400 off Apple’s MSRP, and it’s the cheapest price... Read more
Get a 2019 13″ MacBook Air for only $779 toda...
Apple has clearance, Certified Refurbished, 2019 13″ 1.6GHz/128GB MacBook Airs available again for $779. Each MacBook features a new outer case, comes with a standard Apple one-year warranty, and is... Read more
2020 11″ iPad Pros on sale today for $50-$75...
Apple reseller Expercom has new 2020 11″ Apple iPad Pros on sale for $50-$75 off MSRP, with prices starting at $749. These are the same iPad Pros sold by Apple in their retail and online stores: – 11... Read more
Apple has restocked 2020 13″ MacBook Airs sta...
Apple has restocked Certified Refurbished 2020 13″ MacBook Airs starting at only $849 and up to $200 off the cost of new Airs. Each MacBook features a new outer case, comes with a standard Apple one-... Read more
Apple’s new 8th generation 10.2″ iPads are on...
Amazon is discounting new 2020 8th generation 10.2″ Apple iPads by up to $35 off MSRP with prices starting at only $299. Shipping is free. These are the same iPads sold by Apple in their retail and... Read more
Today on Woot: Apple refurbished 16″ MacBook...
Amazon-owned Woot has Apple refurbished 16″ MacBook Pros available today for up to $605 off the cost of new models. Shipping is free for Prime members: – 16″ 6-Core MacBook Pros: $1874.99 $525 off... Read more

Jobs Board

Freelance *Apple* Technology Journalist - V...
…freelance basis. Valnet Inc. is looking for journalists with strong knowledge of Apple technology for our website MakeUseOf.com MakeUseOf is one of the largest Read more
*Apple* Certified Macintosh Technician - Exc...
Apple Certified Macintosh Technician Summary Title: Apple Certified Macintosh Technician ID:350 Department:All Location:Bethesda, MD Description Apple Read more
Security Officer ($23.00/Hourly) - *Apple*...
**Security Officer \($23\.00/Hourly\) \- Apple Store** **Description** About NMS Built on a culture of safety and integrity, NMSdelivers award\-winning, integrated Read more
Security Officer ($23.00/Hourly) - *Apple*...
**Security Officer \($23\.00/Hourly\) \- Apple Store** **Description** About NMS Built on a culture of safety and integrity, NMSdelivers award\-winning, integrated Read more
*Apple* Certified Macintosh Technician - Exc...
Apple Certified Macintosh Technician Summary Title: Apple Certified Macintosh Technician ID:350 Department:All Location:Falls Church, VA Description Apple Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.