You are on page 1of 25

Guide to Programming with

Python

Chapter Eight (Part I)


Object Oriented Programming; Classes,
constructors, attributes, and methods
Objectives
 Create classes to define objects
 Write methods and create attributes for objects
 Instantiate objects from classes
 Restrict access to an object’s attributes
 Work with both new-style and old-style classes

 The Critter Caretaker Program

Guide to Programming with Python 2


Lecture 1
Python Is Object-Oriented
 Object-oriented programming (OOP):
Methodology that defines problems in terms of
objects that send messages to each other
– dir(1)
– In a game, a Missile object could send a Ship object
a message to Explode
 OOP not required, unlike Java and C#

Guide to Programming with Python 3


Understanding Object-Oriented Basics
 OOP allows representation of real-life objects as
software objects (e.g., a dictionary as an object)
 Object: A single software unit that combines
attributes and methods
 Attribute: A "characteristic" of an object; like a
variable associated with a kind of object
 Method: A "behavior" of an object; like a function
associated with a kind of object
 Class: Code that defines the attributes and
methods of a kind of object (A class is a collection
of variables and functions working with these
variables)
4
Fundamental Concepts of OOP

 Information hiding
 Abstraction
 Encapsulation
 Modularity
 Polymorphism
 Inheritance

Guide to Programming with Python 5


Creating Classes for Objects
class Puppy(object):
def __init__(self, name, color):
self.name = name
self.color = color
def bark(self):
print "I am", color, name
puppy1 = Puppy("Max", "brown")
puppy1.bark()
puppy2 = Puppy("Ruby", "black")
puppy2.bark()
 Class: Code that defines the attributes and
methods of a kind of object
 Instantiate: To create an object; A single object is
called an Instance
6
The Simple Critter Program
class Critter(object):
"""A virtual pet"""
def talk(self):
print "Hi. I'm an instance of class Critter.”
# main
crit = Critter()
crit.talk()
 Define class:
– Class name, begin with capital letter, by convention
– object: class based on (Python built-in type)
 Define a method
– Like defining a function
– Must have a special first parameter, self, which provides
way for a method to refer to object itself
7
Class methods & “self” parameter
 Class methods have only one specific difference
from ordinary functions--they must have an extra
first name that has to be added to the beginning of
the parameter list
 You do not give a value for this parameter(self)
when you call the method, Python will provide it.
 This particular variable refers to the object itself,
and by convention, it is given the name self.

Guide to Programming with Python 8


Instantiating an Object
crit = Critter()

 Create new object with class name followed by set


of parentheses
– Critter() creates new object of class Critter
 Can assign a newly instantiated object to a variable
of any name
– crit = Critter() assigns new Critter object to crit
 Avoid using variable that's same name as the class
name in lowercase letters

Guide to Programming with Python 9


Creating Multiple Objects
crit1 = Critter()
crit2 = Critter()

 Creating multiple objects is easy


 Two objects created here
 Each object is independent, full-fledged critter

Guide to Programming with Python 10


Invoking a Method
crit.talk()

 Any Critter object has method talk()


 crit.talk() invokes talk() method of Critter
object crit
 Prints string "Hi. I'm an instance of class
Critter."

simple_critter.py

Guide to Programming with Python 11


Using Constructors
 Constructor: A special method that is
automatically invoked right after a new object is
created
 Usually write one in each class
 Usually sets up the initial attribute values of
new object in constructor

Guide to Programming with Python 12


Creating a Constructor
def __init__(self):
print "A new critter has been born!"

 New Critter object automatically announces itself


to world
 __init__
– Is special method name
– Automatically called by new Critter object

Guide to Programming with Python 13


Initializing Attributes
class Critter(object):
def __init__(self, name):
self.name = name
...
crit1 = Critter("Poochie”)

 Can have object’s attributes automatically created and initialized


through constructor (Big convenience!)
 self – first parameter in every instance method
– self receives reference to new Critter object
– name receives "Poochie"
– self.name = name creates the attribute name for object
and sets to "Poochie"
– crit1 gets new Critter object
14
Accessing Attributes
class Critter(object):
...
def talk(self):
print "Hi. I'm", self.name, "\n"
...
crit1.talk()
print crit1.name

 Assessing attributes using methods: talk()


– Uses a Critter object’s name attribute
– Receives reference to the object itself into self
 Accessing Attributes Directly

Guide to Programming with Python 15


Printing an Object (How?)
class Critter(object):
...
def __str__(self):
rep = "Critter object\n"
rep += "name: " + self.name + "\n"
return rep
...
print crit1

 __str__ is a special method that returns string


representation of object

Guide to Programming with Python (sample code) 16


Two More Special Methods
class Puppy(object):
def __init__(self):
self.name = []
self.color = []

def __setitem__(self, name, color):


self.name.append(name)
self.color.append(color)

def __getitem__(self, name):


if name in self.name:
return self.color[self.name.index(name)]
else:
return None

dog = Puppy()
dog['Max'] = 'brown'
dog['Ruby'] = 'yellow’
print "Max is", dog['Max']
17
Using Class Attributes and Static
Methods
 Class attribute: A single attribute that’s
associated with a class itself (not an instance!)
 Static method: A method that’s associated with a
class itself
 Class attribute could be used for counting the total
number of objects instantiated, for example
 Static methods often work with class attributes

Guide to Programming with Python 18


Creating a Class Attribute
class Critter(object):
total = 0
 total = 0 creates class attribute total set to 0
 Assignment statement in class but outside method
creates class attribute
 Assignment statement executed only once,
when Python first sees class definition
 Class attribute exists even before single object
created
 Can use class attribute without any objects of class
in existence

Guide to Programming with Python 19


Accessing a Class Attribute
class Critter(object):
total = 0

def status():
print "Total critters", Critter.total

status = staticmethod(status)

def __init__(self, name):


Critter.total += 1

print Critter.total #the class


print crit1.total #the instance
#crit1.total += 1 # won’t work; can't assign new value to
a class attribute through instance

20
Creating a Static Method
class Critter(object):
...
def status():
print "Total critters", Critter.total

status = staticmethod(status)

 status()
– Is static method
– Doesn't have self in parameter list because method
will be invoked through class not object
 staticmethod()
– Built-in Python function
– Takes method and returns static method
21
Invoking a Static Method
...
crit1 = Critter("critter 1")
crit2 = Critter("critter 2")
crit3 = Critter("critter 3")

Critter.status()

 Critter.status()
– Invokes static method status() defined in Critter
– Prints a message stating that 3 critters exist
– Works because constructor increments class
attribute total, which status() displays
classy_critter.py
Guide to Programming with Python 22
Setting default values
class Person(object):
def __init__(self, name="Tom", age=20):
self.name = name
self.age = age
def talk(self):
print "Hi, I am", self.name
def __str__(self):
return "Hi, I am " + self.name

one = Person(name="Yuzhen", age = "forever 20")


print one

two = Person()
print two

Guide to Programming with Python 23


Summary
 Object-oriented Programming (OOP) is a
methodology of programming where new types of
objects are defined
 An object is a single software unit that combines
attributes and methods
 An attribute is a “characteristic” of an object; it’s a
variable associated with an object (“instance variable”)
 A method is a “behavior” of an object; it’s a
function associated with an object
 A class defines the attributes and methods of a
kind of object

Guide to Programming with Python 24


Summary (continued)
 Each instance method must have a special first
parameter, called self by convention, which
provides a way for a method to refer to object itself
 A constructor is a special method that is
automatically invoked right after a new object is
created
 A class attribute is a single attribute that’s
associated with a class itself
 A static method is a method that’s associated with
a class itself

Guide to Programming with Python 25

You might also like