Python Programming (R19) - UNIT-4
Python Programming (R19) - UNIT-4
UNIT-4
1
Object Oriented Programming
Python has been an object-oriented language since it existed. Because of this, creating and using classes
and objects are downright easy. This chapter helps you become an expert in using Python's object-
oriented programming support.
If you do not have any previous experience with object-oriented (OO) programming, you may want to
consult an introductory course on it or at least a tutorial of some sort so that you have a grasp of the basic
concepts.
However, here is small introduction of Object-Oriented Programming (OOP) to bring you at speed −
Creating Classes
The class statement creates a new class definition. The name of the class immediately follows the
keyword class followed by a colon as follows −
class ClassName:
'Optional class documentation string'
class_suite
The class has a documentation string, which can be accessed via ClassName. doc .
The class_suite consists of all the component statements defining class members, data attributes
and functions.
Example
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
The variable empCount is a class variable whose value is shared among all instances of a this
class. This can be accessed as Employee.empCount from inside the class or outside the class.
The first method init () is a special method, which is called class constructor or initialization
method that Python calls when you create a new instance of this class.
You declare other class methods like normal functions with the exception that the first argument
to each method is self. Python adds the self argument to the list for you; you do not need to
include it when you call the methods.
Accessing Attributes
You access the object's attributes using the dot operator with object. Class variable would be accessed
using class name as follows −
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
Now, putting all the concepts together −
#!/usr/bin/python
class Employee:
'Common base class for all employees'
empCount = 0
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
class Employee:
'Common base class for all employees'
empCount = 0
4
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
Example
This del () destructor prints the class name of an instance that is about to be destroyed −
#!/usr/bin/python
class Point:
def init ( self, x=0, y=0):
self.x = x
self.y = y
5
def del (self):
class_name = self. class . name
print class_name, "destroyed"
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3
When the above code is executed, it produces following result −
3083401324 3083401324 3083401324
Point destroyed
Note − Ideally, you should define your classes in separate file, then you should import them in your
main program file using import statement.
Class Inheritance
Instead of starting from scratch, you can create a class by deriving it from a preexisting class by listing
the parent class in parentheses after the new class name.
The child class inherits the attributes of its parent class, and you can use those attributes as if they were
defined in the child class. A child class can also override data members and methods from the parent.
Syntax
Derived classes are declared much like their parent class; however, a list of base classes to inherit from
is given after the class name −
class SubClassName (ParentClass1[, ParentClass2, ...]):
'Optional class documentation string'
class_suite
Example
#!/usr/bin/python
def parentMethod(self):
print 'Calling parent method'
def getAttr(self):
print "Parent attribute :", Parent.parentAttr
6
def childMethod(self):
print 'Calling child method'
Overriding Methods
You can always override your parent class methods. One reason for overriding parent's methods is
because you may want special or different functionality in your subclass.
Example
#!/usr/bin/python
7
Base Overloading Methods
Following table lists some generic functionality that you can override in your own classes −
1
init ( self [,args...] )
Constructor (with any optional arguments)
Sample Call : obj = className(args)
2
del ( self )
Destructor, deletes an object
Sample Call : del obj
3
repr ( self )
Evaluable string representation
Sample Call : repr(obj)
4
str ( self )
Printable string representation
Sample Call : str(obj)
5
cmp ( self, x )
Object comparison
Sample Call : cmp(obj, x)
Overloading Operators
Suppose you have created a Vector class to represent two-dimensional vectors, what happens when you
use the plus operator to add them? Most likely Python will yell at you.
You could, however, define the add method in your class to perform vector addition and then the
plus operator would behave as per expectation −
Example
#!/usr/bin/python
class Vector:
def init (self, a, b):
self.a = a
self.b = b
8
def add (self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2
When the above code is executed, it produces the following result −
Vector(7,8)
Data Hiding
An object's attributes may or may not be visible outside the class definition. You need to name attributes
with a double underscore prefix, and those attributes then are not be directly visible to outsiders.
Example
#!/usr/bin/python
class JustCounter:
secretCount = 0
def count(self):
self. secretCount += 1
print self. secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter. secretCount
When the above code is executed, it produces the following result −
1
2
Traceback (most recent call last):
File "test.py", line 12, in <module>
print counter. secretCount
AttributeError: JustCounter instance has no attribute ' secretCount'
Python protects those members by internally changing the name to include the class name. You can
access such attributes as object._className attrName. If you would replace your last line as following,
then it works for you −
.........................
print counter._JustCounter secretCount
When the above code is executed, it produces the following result −
1
2
2
9
Advantages and Disadvantages of Object-Oriented Programming (OOP)
This reading discusses advantages and disadvantages of object-oriented programming, which is a
well-adopted programming style that uses interacting objects to model and solve complex programming
tasks. Two examples of popular object-oriented programming languages are Java and C++. Some other
well-known object-oriented programming languages include Objective C, Perl, Python, Javascript,
Simula, Modula, Ada, Smalltalk, and the Common Lisp Object Standard.
10