http://www.skillbrew.com
/Skillbrew
Talent brewed by the
industry itself
Classes and Objects
Pavan Verma
@YinYangPavan
Founder, P3 InfoTech Solutions Pvt. Ltd.
1
Python Programming Essentials
© SkillBrew http://skillbrew.com
Contents
 Defining a class
 Class attributes
 Class methods
 Class instances
 __init__ method
 self keyword
 Accessing attributes and methods
 Deleting attributes
 Types of attributes
 Inheritance
 Method overriding
 Calling parent functions
2
© SkillBrew http://skillbrew.com
Defining a class
A class is a special data type which defines how
to build a certain kind of object
class className():
# statements
Use the class keyword to define a class
3
© SkillBrew http://skillbrew.com
Defining a class
class Calculator():
counter = 0
def __init__(self):
pass
def add(self):
pass
class keyword to
define a class
A class definition creates a class object from which
class instances may be created
4
© SkillBrew http://skillbrew.com
Class Attributes
class Calculator():
counter = 0
def __init__(self):
pass
def add(self):
pass
class attributes are
just like variables
5
© SkillBrew http://skillbrew.com
Class Methods
class Calculator():
counter = 0
def __init__(self):
pass
def add(self):
pass
class methods are
functions invoked on an
instance of the class
6
© SkillBrew http://skillbrew.com
Class Instances
calc = Calculator()
• In order to you use it we create an instance of
class
• Instances are objects created that use the class
definition
Just call the class definition like a function to create
a class instance
7
© SkillBrew http://skillbrew.com
__init__ method
• __init__ method is like an initialization
constructor
• When a class defines an __init__ ()
method, class instantiation automatically invokes
__init__() method for the newly created
class instance
8
© SkillBrew http://skillbrew.com
__init__ method (2)
class Calculator():
counter = 0
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def add(self):
pass
calc = Calculator(10, 20)
print calc.x
print calc.y
Output:
10
20
9
© SkillBrew http://skillbrew.com
self keyword
• The first argument of every method is a reference
to the current instance of the class
• By convention, we name this argument self
• In __init__, self refers to the object currently
being created
• In other class methods, it refers to the instance
whose method was called
• Similar to the keyword this in Java or C++
10
© SkillBrew http://skillbrew.com
Accessing attributes and methods
Use the dot operator to access class attributes and
methods
calc = Calculator(10, 20)
print calc.x
print calc.y
print calc.counter
Output:
10
20
0
11
© SkillBrew http://skillbrew.com
Accessing attributes and methods (2)
class Calculator():
counter = 0
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def add(self):
return self.x + self.y
calc = Calculator(10, 20)
print calc.add()
• Although you must specify self
explicitly when defining the
method, you don’t include it
when calling the method
• Python passes it for you
automatically
12
© SkillBrew http://skillbrew.com
Deleting Instances
• When you are done with an object , you don’t have
to delete or free it explicitly
• Python has automatic garbage collection
• Python will automatically detect when all references
to a piece of memory have gone out of scope.
Automatically frees the memory.
• Garbage collection works well, hence fewer memory
leaks
• There’s also no “destructor” method for classes.
13
© SkillBrew http://skillbrew.com
Attributes
14
© SkillBrew http://skillbrew.com
Two kinds of Attributes
1. class attributes
2. data attributes
15
© SkillBrew http://skillbrew.com
Data attributes
class Calculator():
counter = 0
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def add(self):
return self.x + self.y
calc = Calculator(10, 20)
print calc.x # 10
print calc.y # 20
calc2 = Calculator(15, 35)
print calc2.x # 15
print calc2.y # 35
• Data attributes are
variables owned by a
particular instance
• Each instance has its own
value for data attributes
16
© SkillBrew http://skillbrew.com
Data attributes (2)
class Calculator():
counter = 0
def __init__(self, x=0, y=0):
self.x = x
self.y = y
calc = Calculator(10, 20)
calc.z = calc.x + calc.y
print calc.z
print calc.__dict__
Output:
30
{'y': 20, 'x': 10, 'z': 30}
17
• In Python classes you don’t
have a restriction of
declaring all data
attributes before hand,
you can create data
attributes at runtime
anywhere
• calc.z is an attribute
which is defined at
runtime outside the class
definition
© SkillBrew http://skillbrew.com
Class attributes
class Calculator():
counter = 0
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def add(self):
self.__class__.counter += 1
return self.x + self.y
calc = Calculator(10, 20)
print calc.add()
print calc.counter # 1
calc2 = Calculator(30, 40)
print calc2.add()
print calc2.counter # 2
• Access the class
attribute using
self.__class__.count
er
• Class attributes are
shared among all
instances
18
© SkillBrew http://skillbrew.com
Class attributes (2)
 Class attributes are defined within a class definition
and outside of any method
 Because all instances of a class share one copy of a
class attribute, when any instance changes it, the
value is changed for all instances
self.__class__.attribute_name
19
© SkillBrew http://skillbrew.com
Data attributes
 Variable owned by a
particular instance
 Each instance has its own
value for it
 These are the most
common kind of attribute
Class attributes
 Owned by the class as a
whole
 All class instances share the
same value for it
 Good for
• Class-wide constants
• Building counter of how
many instances of the
class have been made
Data attributes vs Class attributes
20
© SkillBrew http://skillbrew.com
Inheritance
21
© SkillBrew http://skillbrew.com
Inheritance
class Shape(object):
def name(self, shape):
print "Shape: %s" % shape
class Square(Shape):
def area(self, side):
return side**2
Shape is the
parent class
Square is the
child class inherits
Shape
class Parent(object):
pass
class Child(Parent):
pass
22
© SkillBrew http://skillbrew.com
Inheritance (2)
class Shape(object):
def name(self, shape):
print "Shape: %s" % shape
class Square(Shape):
def area(self, side):
return side**2
s = Square()
s.name("square")
print s.area(2)
Output:
Shape: square
4
Child class Square has access to
Parent classes methods and
attributes
23
© SkillBrew http://skillbrew.com
Method overriding
class Shape(object):
def name(self, shape):
print "Shape: %s" % shape
class Square(Shape):
def name(self, shape):
print "Child class Shape %s" % shape
def area(self, side):
return side**2
s = Square()
s.name("square")
print s.area(2)
Output:
Child class Shape square
4
24
© SkillBrew http://skillbrew.com
Calling the parent method
class Shape(object):
def name(self, shape):
print "Shape: %s" % shape
class Square(Shape):
def name(self, shape):
super(Square, self).name(shape)
print "Child class Shape %s" % shape
def area(self, side):
return side**2
s = Square()
s.name("square")
Use super keyword to call parent class method
super(ChildClass, self).method(args)
25
© SkillBrew http://skillbrew.com
Class & Static Methods
class Calculator(object):
counter = 0
def __init__(self, x=0, y=0):
...
def add(self):
...
@classmethod
def update_counter(cls):
cls.counter += 1
@staticmethod
def show_help():
print 'This calculator can
add'
26
© SkillBrew http://skillbrew.com
Resources
 http://www.diveintopython.net/object_o
riented_framework/defining_classes.html
 http://docs.python.org/2/tutorial/classes
.html
 http://docs.python.org/2/library/function
s.html#super
27