Classes and Objects¶
Creating Classes¶
Syntax:
class ClassName:
'Optional class documentation string'
class_suite
Example:
class Student:
'Common base class for all students'
studCount = 0
def __init__(self, name, marks):
self.name = name
self.marks = marks
Student.studCount += 1
def displayCount(self):
print ("Total Student %d" % Student.studCount)
def displayStudent(self):
print ("Name : ", self.name, ", Marks: ", self.marks)
Creating Instances¶
This would create first object of Student class
stud1 = Student("Saurabh", 75)
This would create second object of Student class
stud2 = Student("SJ", 90)
Accessing Attributes¶
stud1.displayStudent()
stud2.displayStudent()
print ("Total Student %d" % Student.studCount)
Complete Program
class Student:
'Common base class for all students'
studCount = 0
def __init__(self, name, marks):
self.name = name
self.marks = marks
Student.studCount += 1
def displayCount(self):
print ("Total Student %d" % Student.studCount)
def displayStudent(self):
print ("Name : ", self.name, ", Marks: ", self.marks)
#This would create first object of Student class
stud1 = Student("Saurabh", 75)
#This would create second object of Student class
stud2 = Student("SJ", 90)
stud1.displayStudent()
stud2.displayStudent()
print ("Total Student %d" % Student.studCount)
Output:
Name : Saurabh , Marks: 75
Name : SJ , Marks: 90
Total Student 2
Built-In Class Attributes¶
Note
__dict__ − Dictionary containing the class’s namespace.
__doc__ − Class documentation string or none, if undefined.
__name__ − Class name.
__module__ − Module name in which the class is defined. This attribute is “__main__” in interactive mode.
__bases__ − empty tuple containing the base classes.
class Student:
'Common base class for all students'
studCount = 0
def __init__(self, name, marks):
self.name = name
self.marks = marks
Student.studCount += 1
def displayCount(self):
print ("Total Student %d" % Student.studCount)
def displayStudent(self):
print ("Name : ", self.name, ", Marks: ", self.marks)
#This would create first object of Student class
stud1 = Student("Saurabh", 75)
#This would create second object of Student class
stud2 = Student("SJ", 90)
stud1.displayStudent()
stud2.displayStudent()
print ("Total Student %d" % Student.studCount)
print ("Student.__doc__:", Student.__doc__)
print ("Student.__name__:", Student.__name__)
print ("Student.__module__:", Student.__module__)
print ("Student.__bases__:", Student.__bases__)
print ("Student.__dict__:", Student.__dict__ )
Output:
Student.__doc__: Common base class for all students
Student.__name__: Student
Student.__module__: __main__
Student.__bases__: (<class 'object'>,)
Student.__dict__: {'__module__': '__main__', '__doc__': 'Common base class for all students', 'studCount': 2, '__init__': <function Student.__init__ at 0x015993D0>, 'displayCount': <function Student.displayCount at 0x01599388>, 'displayStudent': <function Student.displayStudent at 0x01599340>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>}
Class Inheritance¶
Syntax:
class SubClassName (ParentClass1[, ParentClass2, ...]):
'Optional class documentation string'
class_suite
Example:
#!/usr/bin/python3
class Parent: # define parent class
parentAttr = 10
def __init__(self):
print ("Calling parent constructor")
def parentMethod(self):
print ('Calling parent method')
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print ("Parent attribute :", Parent.parentAttr)
class Child(Parent): # define child class
def __init__(self):
print ("Calling child constructor")
def childMethod(self):
print ('Calling child method')
c = Child() # instance of child
c.childMethod() # child calls its method
c.parentMethod() # calls parent's method
c.setAttr(20) # again call parent's method
c.getAttr() # again call parent's method
Output:
Calling child constructor
Calling child method
Calling parent method
Parent attribute : 20
Multiple Inheritance:¶
class A: # define your class A
.....
class B: # define your calss B
.....
class C(A, B): # subclass of A and B
.....
issubclass(sub, sup)
isinstance(obj, Class)
Overriding Methods¶
#!/usr/bin/python3
class Parent: # define parent class
def myMethod(self):
print ('Calling parent class method')
class Child(Parent): # define child class
def myMethod(self):
print ('Calling child class method')
c = Child() # instance of child
c.myMethod() # child calls overridden method
Output:
Calling child class method
Magic Methods¶
(Built_in Functions or Base Overloading Methods)
Note
__init__ ( self [,args…] )
__del__( self )
__repr__( self )
__str__( self )
__cmp__ ( self, x )
Overloading Operators¶
#!/usr/bin/python3
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
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)
Output:
Vector(7,8)