Unit 5
Unit 5
1. Classes
A class is user-defined data type used to describe something in the world, such as occurrences, things,
external entities, and so on.
A class describes template or blueprint that describes the structure and behavior of a set of similar
objects.
Once we have definition for a class, a specific instance of that class can be easily created.
For eg. Consider a class student. A student has attributes such a roll_no, name, course and aggregate.
The operations that can be performed on its data may include ‘getdata’, ‘setdata’,’editdata’ and
so on.
A class is collection of objects.
Object Name
Attribute 1
Attribute 2
.........
Attribute N
Function 1
Function 2
.........
Function N
Fig1. Representation of an Object
Message Passing
Two objects communicate with each other though messages.
An object asks another object to involve one of its methods by sending it a message.
In figure2 sender object is sending message to the receiver object to get details of a student. i.e. the
sender is passing some specific information to the receiver so that the receiver can send the correct
and precise information to the sender. The data that is transferred with the message is called
parameters. Here, roll_no 1 is the parameter.
The messages that are sent to other objects consist of three aspects-the receiver object, the name of
the method that the receiver should invoke, and the parameters that must be used with the method.
Student
Undergraduate Postgraduate
Student Student
We can inherit two classes from the class student- undergraduate students and postgraduate students
(refer figure4). These two classes will have all the properties of class students and in addition
to that it will have even more specialized members.
When a derived class receives a message to execute a method, it finds the method in its own
class. If it finds the method, then it simply executes it. If the method is not present, it searches for that
method in its superclass. If the method is found, it is executed; otherwise, an error message is reported.
5. Polymorphism
Polymorphism refers to having several different forms.
While inheritance is related to classes and their hierarchy, polymorphism on other hand,
is related to methods.
Polymorphism is a concept that enables the programmers to assign a different meaning or
usage to a method in different context.
Polymorphism exist when a number of subclasses is defined which have methods of
same name.
Polymorphism can also be applied to operators.
7. Reusability
Reusability means developing codes that can be reused either in the same program or in
the different programs.
Reusability is attained through inheritance, containership and polymorphism.
8. Delegation
To provide maximum flexibility to programmers and to allow them to generate a reusable code,
object oriented languages also support delegation.
In composition, an object can be composed of other objects and thus, the object exhibits a ‘has-
a’ relationship.
In delegation, more than one object is involved in handling a request. The object that receives
the request for a service, delegates it to another object called its delegate.
Delegation means that one object is dependent on another object to provide functionalities.
The property of delegation emphasizes on the ideology than a complex object is made of several
simpler objects.
For example, our body is made up of brain, heart, hands, eyes, ears, etc. The functioning
of the whole body as a system rests on the correct functioning of the parts it is composed of.
Delegation is different from inheritance in the way that two classes that participates
in inheritance share ‘is-a’ relationship; however, in delegation, they have a ‘has-a’ relationship.
9. Data Abstraction
Data Abstraction refers to the process by which data and functions are defined in such a way
5 Unit III: Functions and Strings FE PPS 2024
that only essential details are revealed and the implementation details are hidden.
The main focus of data abstraction is to separate the interface and implementation of
a program.
For example, as user of television sets, we can switch it on or off, change the channel, set
the volume and add external devices such as speakers and CD or DVD players without
knowing the details how its functionality has been implemented.
Therefore, the implementation is completely hidden from external world.
class class_name:
<statement-1>
<statement-2>
.
.
.
<statement-N>
It starts with a keyword class followed by the class_name and colon (:)
The statement in the definition can be any of these —
o Sequential instructions,
o Decision control statements
o Loop statements and
o Function definition
Variables defined in the class are called class variables and functions defined inside a class are
called class method. Class variables and class methods are together known as class members.
The class members can be accessed through class objects.
Class definitions can appear anywhere in a program, but they usually written near the beginning
of the program, after import statement.
When a class definition is entered, a new namespace is created, and used as the local scope.
Creating Objects
Once a class is defined, the next job is to create an object (or instance) of that
class. The object can then access class variables and class methods using dot operator (.)
The syntax to create an object is given as:
Object_name=class_name()
Creating an object or instance of a class is known as class instantiation. Class instantiation uses
function notation.
7 Unit III: Functions and Strings FE PPS 2024
The syntax for accessing a class member through the class object is:
Object_name.class_member_name
class ABC:
var=10
obj=ABC() #Object obj is created of class ABC
print(obj.var)
OUTPUT
10
In the above program, we have defined a class ABC which has var having a value of 10. The
object of the class is created and used to access the class variable using dot operator.
Q6. What does the self argument signify in the class methods?
Ans.
Class Method definition is nothing but Function Definitions, exactly same as ordinary
functions.
Syntax:
Class Class_name:
def function_name(self):
Statement 1
Statement 2
.
.
Statement n
Output:
Roll no of Student is 10
Q8. Write a note on class variables and object variables with example. Ans.
Class Variable:
Class variables are used to declare within a class. These variables have same value across all instances
(objects). These variables are also called as static variables. All the objects/Instance of the class will
share the class variable. Since there exist only one copy of the class variable, any changes made to the
class variable by an object will be reflected in all other objects/instances.
Syntax to access class variable:
className. Class_variable
here className is the name of the class and class_variable is the class variable defined in the
class.
Class variables are created and assigned values within declaration itself. You can also access class
variables with an object created within a class
Example 2:
Class student: # Class definition
rollno =10 # Clas Variable
def display(self):
print("class variable value is ", self.rollno) #printed class
variable
obj= student()
Object Variable:
Object variable or instance variable have different value for each new instance. If a class has N
instances/Objects, then there will be a N separate copies of the object variable as each
object/instances have its own object variable. Object variables are not shared between other objects.
A change made to the object variable by one object, will not be replicated in other objects.
Example 2:
class Car:
wheels = 4 #Class Variable
def init (self, comp):
self.company = comp # Object/Instance Variable
print("The company(Object Var) : ", self.company)
print("The Wheels(Class var) : ", Car.wheels)
obj1 = Car("Mercedez")
obj2 = Car("BMW")
Output:
The company(Object Var) : Mercedez
The Wheels(Class var) : 4
The company(Object Var) : BMW
The Wheels(Class var) : 4
class ABC:
def init (self, var):
self.var = var
print("The object value is =", var)
def del (self):
print("Object with value %d is going out of scope"%self.var)
Output:
The object value is = 10
The object value is = 20
Object with value 10 is going out of scope
Object with value 20 is going out of scope
In the above program init () method is automatically called when object is created.
del () method is also automatically called when object is deleted.
We are deleting object explicitly, by del objectName. So while object is getting deleted del
() method is called.
Q11. Explain public and private members with suitable example. Ans.
Ans:
Public variables are the variables which are declared inside class and can be accessed from anywhere
in the program using the dot (.) operator.
It means public variables can be accessed from within the class as well as from outside the
class in which it is defined.
Private Variables are defined in the class with double underscore prefix ( ). Private
variables are accessible from only within the class and from nowhere outside the class.
class ABC:
def init (self, val1, val2):
self.var1 = val1 # var1 is public variable
self. var2= val2 # var2 is private variable
As a good programming habit, you should never try to access a private variable from anywhere
outside the class.
But if for some reason, you want to access the private variables outside the class, use following
Syntax:
objectName._className privatevariable
So to remove error from above code, you shall write last statement as print("From main module, var2
=", obj._ABC var2)
Private Methods:
We know that private attributes should not be accessed from anywhere outside the class.
Similarly, you can have private methods in your class. Which are accessible only within the
class.
class ABC:
def init (self, var1, var2):
self.var1 = var1 # var1 is public variable
self. var2= var2 # var2 is private variable
Output:
From class method var1= 30
From class method var2= 20
From class method var1= 30
From class method var2= 20
5.8.1 Get
Example:
class Person:
17 Unit III: Functions and Strings FE PPS 2024
def __init__(self):
self.name = "John"
self.age = 30
# Create an object
person = Person()
5.8.2 Set
Example:
class Person:
def __init__(self):
self.name = "John"
5.8.3 Delete
Python delattr() Function is used to delete an object attribute in Python. It takes two arguments, the
first one is the class object from which we want to delete, second is the name of the attribute which
we want to delete. We can use delattr() to remove an attribute dynamically at runtime in Python.
Syntax
delattr (object, name)
Parameters:
Object: An object from which we want to delete the attribute
name: The name of the attribute we want to delete
class Equation:
x=3
y = -8
z=5
l1 = Equation()
print("Value of x = ", l1.x)
print("Value of y = ", l1.y)
print ("Value of z = ", l1.z)
Output
Value of x = 3
Value of y = -8
Value of z = 5
Value of x = 3
ERROR!
Traceback (most recent call last):
File "<string>", line 14, in <module>
AttributeError: 'Equation' object has no attribute 'z'
Output:
Garbage collection thresholds: (700, 10, 10)
The @classmethod decorator is a built-in function decorator that is an expression that gets evaluated
after your function is defined. The result of that evaluation shadows your function definition. A class
method receives the class as an implicit first argument, just like an instance method receives the
instance.
Syntax Python Class Method:
class C(object):
@classmethod
def fun(cls, arg1, arg2, ...):
....
fun: function that needs to be converted into a class method
returns: a class method for function.
A class method is a method that is bound to the class and not the object of the class.
They have the access to the state of the class as it takes a class parameter that points to the class
and not the object instance.
It can modify a class state that would apply across all the instances of the class. For example, it
can modify a class variable that will be applicable to all the instances.
Example:
def get_value(self):
return self.value
# Output: 10
Example:
class MyClass:
def __init__(self, value):
self.value = value
print(MyClass.get_max_value(20, 30))
print(obj.get_max_value(20, 30))
complete Implementation
# Python program to demonstrate
# use of class method and static method.
from datetime import date
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
print(person1.age)
print(person2.age)