13a-Objects
Object Oriented
• A program is made up of many cooperating objects
• Instead of being the “whole program” - each object is a little “island” within the program and cooperatively working with other objects.
• A program is made up of one or more objects working together - objects make use of each other’s capabilities
Object
• An Object is a bit of self-contained Code and Data
• A key aspect of the Object approach is to break the problem into smaller understandable parts (divide and conquer)
• Objects have boundaries that allow us to ignore unneeded detail
• We have been using objects all along: String Objects, Integer Objects, Dictionary Objects, List Objects...
All About Class
An example of a class in python:
class Person:
department = 'School of Information' #a class variable
def set_name(self, new_name): #a method
self.name = new_name
def set_location(self, new_location):
self.location = new_location
person = Person()
person.set_name('Christopher Brooks')
person.set_location('Ann Arbor, MI, USA')
print('{} live in {} and works in the department {}'.format(person.name, person.location, person.department))
Christopher Brooks live in Ann Arbor, MI, USA and works in the department School of Information
Best Practics
movies = list()
movie1 = dict()
movie1['Director'] = 'James Cameron'
movie1['Title'] = 'Avatar'
movie1['Release Date'] = '18 December
2009'
movie1['Running Time'] = '162 minutes'
movie1['Rating'] = 'PG-13'
movies.append(movie1)
movie2 = dict()
movie2['Director'] = 'David Fincher'
movie2['Title'] = 'The Social Network'
movie2['Release Date'] = '01 October 2010'
movie2['Running Time'] = '120 min'
movie2['Rating'] = 'PG-13'
movies.append(movie2)
keys = ['Title', 'Director', 'Rating', 'Running Time']
print '-----------'
print movies
print '-----------'
print keys
for item in movies:
print '-----------'
for key in keys:
print key,': ', item[key]
print '-----------'
Objects get created and used
Objects are bits of code and data
Objects hide detail - they allow us to ignore the detail of the “rest of the program”.
Objects hide detail - they allow the “rest of the program” to ignore the detail about “us”.
Definitions
• Class - a template - Dog
• Method or Message - A defined capability of a class - bark()
• Field or attribute- A bit of data in a class - length
• Object or Instance - A particular instance of a class - Lassi
• Objects in Python do not have private or protected members. If you instantiate an object, you have full access to any of the methods or attributes of that object.
• There's no need for an explicit constructor when creating objects in Python. You can add a constructor if you want to by declaring the __init__ method.
Terminology: Object
http://en.wikipedia.org/wiki/Object-oriented_programming
Defines the abstract characteristics of a thing (object), including
the thing's characteristics (its attributes, fields or properties) and
the thing's behaviors (the things it can do, or methods,
operations or features). One might say that a class is a blueprint
or factory that describes the nature of something. For example,
the class Dog would consist of traits shared by all dogs, such as
breed and fur color (characteristics), and the ability to bark and
sit (behaviors).
Terminology: Class
http://en.wikipedia.org/wiki/Object-oriented_programming
A pattern (exemplar) of a class. The
class of Dog defines all possible dogs by
listing the characteristics and behaviors
they can have; the object Lassie is one
particular dog, with particular versions
of the characteristics. A Dog has fur;
Lassie has brown-and-white fur.
Terminology: Instance
http://en.wikipedia.org/wiki/Object-oriented_programming
One can have an instance of a class or a particular object. The
instance is the actual object created at runtime. In programmer
jargon, the Lassie object is an instance of the Dog class. The set
of values of the attributes of a particular object is called its state.
The object consists of state and the behavior that's defined in
the object's class.
Object and Instance are often used interchangeably.
Terminology: Method
http://en.wikipedia.org/wiki/Object-oriented_programming
An object's abilities. In language, methods are verbs. Lassie,
being a Dog, has the ability to bark. So bark() is one of Lassie's
methods. She may have other methods as well, for example sit()
or eat() or walk() or save_timmy(). Within the program, using a
method usually affects only one particular object; all Dogs can
bark, but you need only one particular dog to do the barking
Method and Message are often used interchangeably.
A Sample Class
# class is a reserved word.
# This is the template for making PartyAnimal objects.
class PartyAnimal:
# Each PartyAnimal object has a bit of data.
x = 0
# Each PartyAnimal object has a bit of code.
# “self” is a formal argument that refers to the object itself.
def party(self) :
self.x = self.x + 1
print "So far",self.x
# Create a PartyAnimal object.
an = PartyAnimal()
# Tell the object to run the party() code.
an.party()
an.party()
an.party() # <-------> PartyAnimal.party(an), run party() *within* the object an
Playing with dir() and type()
A Nerdy Way to Find Capabilities
• The dir() command lists capabilities
• Ignore the ones with underscores - these are used by Python itself
• The rest are real operations that the object can perform
• It is like type() - it tells us something *about* a variable
>>> x = list()
>>> type(x)
<type 'list'>
>>> dir(x)
['__add__', '__class__',
'__contains__', '__delattr__',
'__delitem__', '__delslice__',
'__doc__', '__eq__', '__setitem__',
'__setslice__', '__str__',
'append', 'count', 'extend',
'index', 'insert', 'pop', 'remove',
'reverse', 'sort']
>>>
Try dir() with a String
>>> y = “Hello there”
>>> dir(y)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__repr__', '__rmod__', '__rmul__',
'__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode',
'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum',
'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
class PartyAnimal:
x = 0
def party(self) :
self.x = self.x + 1
print "So far",self.x
an = PartyAnimal()
print "Type", type(an)
print "Dir ", dir(an)
$ python party2.py
Type <type 'instance'>
Dir ['__doc__',
'__module__', 'party', 'x'] # Python knows member functions and attributes in a class
Object Lifecycle
• Objects are created, used and discarded
• We have special blocks of code (methods) that get called
• At the moment of creation (constructor)
• At the moment of destruction (destructor)
• Constructors are used a lot
• Destructors are seldom used
Constructor
• The primary purpose of the constructor is to set up some instance variables to have the proper initial values when the object is created
class PartyAnimal:
x = 0
def __init__(self):
print "I am constructed"
def party(self) :
self.x = self.x + 1
print "So far",self.x
def __del__(self):
print "I am destructed", self.x
an = PartyAnimal()
an.party()
an.party()
an.party()
$ python party2.py
I am constructed
So far 1
So far 2
So far 3
I am destructed 3
The constructor and destructor are optional. The constructor is typically used to set up variables. The destructor is seldom used.
Constructor
• In object oriented programming, a constructor in a class is a special block of statements called when an object is created
Many Instances
• We can create lots of objects - the class is the template for the object
• We can store each distinct object in its own variable
• We call this having multiple instances of the same class
• Each instance has its own copy of the instance variables
class PartyAnimal:
x = 0
name = ""
def __init__(self, nam):
self.name = nam
print self.name,"constructed"
def party(self) :
self.x = self.x + 1
print self.name,"party count",self.x
s = PartyAnimal("Sally")
s.party()
j = PartyAnimal("Jim")
j.party()
s.party()
Constructors can have additional parameters.
These can be used to set up instance variables for the particular instance of the class (i.e., for the particular object).
class PartyAnimal:
x = 0
name = ""
def __init__(self, z):
self.name = z
print self.name,"constructed"
def party(self) :
self.x = self.x + 1
print self.name,"party count",self.x
s = PartyAnimal("Sally")
s.party()
j = PartyAnimal("Jim")
j.party()
s.party()
s
x 0 1 2
name: Sally
j
x 0 1
name: Jim
We have two independent instances.
Inheritance
http://www.python.org/doc/2.5.2/tut/node11.html
http://www.ibiblio.org/g2swap/byteofpython/read/inheritance.html
Inheritance
• When we make a new class - we can reuse an existing class and inherit all the capabilities of an existing class and then add our own little bit to make our new class
• Another form of store and reuse
• Write once - reuse many times
• The new class (child) has all the capabilities of the old class (parent) - and then some more
Terminology: Inheritance
http://en.wikipedia.org/wiki/Object-oriented_programming
‘Subclasses’ are more specialized versions of a class, which inherit attributes and behaviors from their parent classes, and can introduce their own.
class PartyAnimal:
x = 0
name = ""
def __init__(self, nam):
self.name = nam
print self.name,"constructed"
def party(self) :
self.x = self.x + 1
print self.name,"party count",self.x
# FootballFan is a class which extends PartyAnimal. It has all the capabilities of PartyAnimal and more.
class FootballFan(PartyAnimal):
points = 0
def touchdown(self):
self.points = self.points + 7
self.party()
print self.name,"points",self.points
s = PartyAnimal("Sally")
s.party()
j = FootballFan("Jim")
j.party()
j.touchdown()
Definitions
• Class - a template - Dog
• Method or Message - A defined capability of a class - bark()
• Object or Instance - A particular instance of a class - Lassie
• Constructor - A method which is called when the instance / object is created
• Inheritance - the ability to take a class and extend it to make a new class.
Summary
• Object Oriented programming is a very structured approach to code reuse.
• We can group data and functionality together and create many independent instances of a class