Transcript Chapter 8

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
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
– self
–
–
–
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
a special method that returns string
representation of object
 __str__ is
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