This document discusses object-oriented programming concepts in Python including classes, objects, attributes, methods, inheritance, and method overriding. It defines a MyVector class with x and y attributes and methods to add vectors and display their count. Access specifiers like private and built-in are covered. Python uses garbage collection and has no destructors. Inheritance allows a SubVector class to extend MyVector, and a method can be overridden to change a class's behavior.
2. Classes & Objects
Class serves as the primary means of abstraction in Object-Oriented
programing.
A class provides a set of behaviors in the form of member_functions /
methods, with implementation that are common to all instance.
In class, the state information for each instance is represented in the
form of Attributes / Data members.
Instances are objects that are created which follow the definition given
inside of the class.
No separate class interface definition.
class MyVector:
def __init__(self, x, y):
self . x = x
self . y = y
def __add__(self, param2):
return MyVector(self.x + param2.x, self.y + param2.y)
Obj1 = MyVector(1, 2) “Object initiation for MyVector class.”
3. Access Specifiers
Python provides a number of access modifiers to help you set the level
of access for attributes and methods.
Private - 2 leading under-scores in its name, but none at the end. Can’t
be accessed outside of class
Built-in – Methods or attributes having 2 underscores at the beginning
and the end.
Doesn’t support ‘protected’. Subclasses would be unable to access these
private data either.
Garbage Collector
Python has automatic garbage collection.
Will automatically detect when all of the references to a piece of
memory have gone out of scope. Automatically frees that memory.
There’s also no Destructor method for classes
4. Methods
Define a method in a class by including function definitions within the
scope of the class block
There must be a special first argument self in all of method definitions
which gets bound to the calling instance
There is usually a special method called __init__ in most classes
class MyVector:
count = 0 “Class attribute”
def __init__(self, x, y):
self . x = x
self . y = y
def __add__(self, param2):
return MyVector(self.x + param2.x, self.y + param2.y)
def displayCount(self):
count = self.x + self.y
return count
Obj1 = MyVector(1, 2) “Object initiation for MyVector class.”
print Obj1.displayCount() “Calling displayCount method.”
5. Constructor ( __init__ )
Serves as a constructor for a class.
The arguments passed to the class are given to its __init__() method
def __init__(self, x, y):
self . x = x
self . y = y
self
The first argument of every method is a reference to the current instance of
the class
Parameter object self refers to current object being created, similar to
keyword this in Java
Although self explicitly mentioned when defining the method, not mandatory
included while calling the method. Self parameter is passed automatically by
python.
6. Attributes
Two Kinds of Attributes:
(1)Data Attributes
Owned by particular instance of a class.
Each instance has its own value for it.
(2)Class Attributes
All instance inside class share the same value for it.
Similar to static variables or class-wide constants.
“Example: Data Attributes”
class MyVector:
def __init__(self, x, y):
self . x = x
self . y = y
“Example: Class Attributes”
class MyVector:
count = 0 “static variable”
def displayCount(self):
count = self.x + self.y
return count
7. Inheritance
A class can extend the definition of another class
Allows to use methods and attributes already defined in the previous
classes.
To define a subclass, put the name of the superclass in parentheses
“(…)”.
Python has no ‘extends’ keyword like Java. Python supports multiple
inheritance.
“Extending MyVector class”
class SubVector (MyVector):
def __init__(self, sub_x, sub_y):
self . x = sub_x
self . y = sub_y
def displayCount(self):
count = self.x + self.y
return count
8. Method Overriding
Overriding is a very important part of OOP. It has the ability of a
class to change the implementation of a method provided by one of its
ancestors.
Python inheritance works through implicit delegation – when the object
cannot satisfy a request, it forward request to its ancestors.
“Parent Class”
class MyVector:
def __init__(self, x, y):
self . x = x
self . y = y
def displayCount(self):
return self.x + self.y
“Child Class”
class SubVector (MyVector):
def displayCount(self): “Overriding dispalyCount method”
return self.x + 10