python 4th unit notes
python 4th unit notes
A class is a user-defined blueprint or prototype from which objects are created. Classes
provide a means of bundling data and functionality together. Creating a new class creates a
new type of object, allowing new instances of that type to be made. Each class instance can
have attributes attached to it to maintain its state. Class instances can also have methods
(defined by their class) for modifying their state.
To understand the need for creating a class and object in Python let’s consider an example,
let’s say you wanted to track the number of dogs that may have different attributes like breed
and age. If a list is used, the first element could be the dog’s breed while the second element
could represent its age. Let’s suppose there are 100 different dogs, then how would you know
which element is supposed to be which? What if you wanted to add other properties to these
dogs? This lacks organization and it’s the exact need for classes.
Syntax: Class Definition
class ClassName:
# Statement
Syntax: Object Definition
obj = ClassName()
print(obj.atrr)
The class creates a user-defined data structure, which holds its own data members and
member functions, which can be accessed and used by creating an instance of that class. A
class is like a blueprint for an object.
Some points on Python class:
Classes are created by keyword class.
Attributes are the variables that belong to a class.
Attributes are always public and can be accessed using the dot (.) operator. Eg.: My
class.Myattribute
Creating a Python Class
Here, the class keyword indicates that you are creating a class followed by the name of the
class (Dog in this case).
class Dog:
sound = "bark"
Object of Python Class
In Python programming an Object is an instance of a Class. A class is like a blueprint while
an instance is a copy of the class with actual values. It’s not an idea anymore, it’s an actual
dog, like a dog of breed pug who’s seven years old. You can have many dogs to create many
different instances, but without the class as a guide, you would be lost, not knowing what
information is required.
An object consists of:
State: It is represented by the attributes of an object. It also reflects the properties of
an object.
Behavior: It is represented by the methods of an object. It also reflects the response
of an object to other objects.
Identity: It gives a unique name to an object and enables one object to interact with
other objects.
# A simple class
# attribute
attr1 = "mammal"
attr2 = "dog"
# A sample method
def fun(self):
print("I'm a", self.attr1)
print("I'm a", self.attr2)
# Driver code
# Object instantiation
Rodger = Dog()
def show(self):
print("Hello my name is " + self.name+" and I" +
" work in "+self.company+".")
def show(somename):
print("Hello my name is " + somename.name +
" and I work in "+somename.company+".")
obj = GFG("John", "GeeksForGeeks")
obj.show()
Output: Output for both of the codes will be the same.
Hello my name is John and I work in GeeksForGeeks.
Explanation:
In this example, we are creating a GFG class and we have created the name, and company
instance variables in the constructor. We have created a method named show() which returns
the string “Hello my name is ” + {name} +” and I work in “+{company}+”.”.We have
created a person class object and we passing the name John and Company GeeksForGeeks
to the instance variable. Finally, we are calling the show() of the class.
Pass Statement
The program’s execution is unaffected by the pass statement’s inaction. It merely permits the
program to skip past that section of the code without doing anything. It is frequently
employed when the syntactic constraints of Python demand a valid statement but no useful
code must be executed.
class MyClass:
pass
__init__() method
The __init__ method is similar to constructors in C++ and Java. Constructors are used to
initializing the object’s state. Like methods, a constructor also contains a collection of
statements(i.e. instructions) that are executed at the time of Object creation. It runs as soon as
an object of a class is instantiated. The method is useful to do any initialization you want to
do with your object.
# Sample class with init method
class Person:
# Sample Method
def say_hi(self):
print('Hello, my name is', self.name)
p = Person('Nikhil')
p.say_hi()
Output:
Hello, my name is Nikhil
Explanation:
In this example, we are creating a Person class and we have created a name instance variable
in the constructor. We have created a method named as say_hi() which returns the string
“Hello, my name is {name}”.We have created a person class object and we pass the name
Nikhil to the instance variable. Finally, we are calling the say_hi() of the class.
__str__() method
Python has a particular method called __str__(). that is used to define how a class object
should be represented as a string. It is often used to give an object a human-readable textual
representation, which is helpful for logging, debugging, or showing users object information.
When a class object is used to create a string using the built-in functions print() and str(), the
__str__() function is automatically used. You can alter how objects of a class are represented
in strings by defining the __str__() method.
class GFG:
def __init__(self, name, company):
self.name = name
self.company = company
def __str__(self):
return f"My name is {self.name} and I work in {self.company}."
class Dog:
# Class Variable
animal = 'dog'
# Instance Variable
self.breed = breed
self.color = color
# Objects of Dog class
Rodger = Dog("Pug", "brown")
Buzo = Dog("Bulldog", "black")
print('Rodger details:')
print('Rodger is a', Rodger.animal)
print('Breed: ', Rodger.breed)
print('Color: ', Rodger.color)
print('\nBuzo details:')
print('Buzo is a', Buzo.animal)
print('Breed: ', Buzo.breed)
print('Color: ', Buzo.color)
class Dog:
# Class Variable
animal = 'dog'
# Instance Variable
self.breed = breed
An Exception is an Unexpected Event, which occurs during the execution of the program. It
is also known as a run time error. When that error occurs, Python generates an exception
during the execution and that can be handled, which prevents your program from
interrupting.
Example: In this code, The system can not divide the number with zero so an exception is
raised.
a=5
b=0
print(a/b)
Output
Traceback (most recent call last):
File "/home/8a10be6ca075391a8b174e0987a3e7f5.py", line 3, in <module>
print(a/b)
ZeroDivisionError: division by zero
Exception handling with try, except, else, and finally
Try: This block will test the excepted error to occur
Except: Here you can handle the error
Else: If there is no exception then this block will be executed
Finally: Finally block always gets executed either exception is generated or not
Python Try, Except, else and Finally Syntax
try:
# Some Code....
except:
# optional block
# Handling of exception (if required)
else:
# execute if no exception
finally:
# Some code .....(always executed)
Working of ‘try’ and ‘except’
Let’s first understand how the Python try and except works
First try clause is executed i.e. the code between try and except clause.
If there is no exception, then only try clause will run, except clause will not get
executed.
If any exception occurs, the try clause will be skipped and except clause will run.
If any exception occurs, but the except clause within the code doesn’t handle it, it is
passed on to the outer try statements. If the exception is left unhandled, then the
execution stops.
A try statement can have more than one except clause.
Example: Let us try to take user integer input and throw the exception in except block.
# Python code to illustrate working of try()
def divide(x, y):
try:
# Floor Division : Gives only Fractional
# Part as Answer
result = x // y
print("Yeah ! Your answer is :", result)
except ZeroDivisionError:
print("Sorry ! You are dividing by zero ")
When working with Object-Oriented Programming in Python, many people have doubts
about the real function and usage of super(). In this post, I will try to explain and exemplify
its use, based on my daily experiences with the technique.
The super() function is used in class inheritance. It allows us to extend/override methods
from a superclass (parent class) to a subclass (child class). Through it, we define a new
behavior for a certain method built in the parent class and inherited by the child class.
To better understand, consider the code below as an example:
class Parent(object):
def __init__(self):
print('Building the Parent class')
class Child(Parent):
def __init__(self):
super(Child, self).__init__()
In the example above, we have a subclass that inherits from the superclass and uses super() to
call the constructor method of the parent class in its own constructor method. This provides
better maintainability of the code, considering that if we used it directly as in the example
below:
class Parent(object):
def __init__(self):
print('Building the Parent class')
class Child(Parent):
def __init__(self):
Parent.__init__(self)
We would have access to the constructor method of the Parent class in a tied manner, where if
we needed to modify the inherited class, we would have more work modifying it in several
other places, as exemplified below:
class Parent(object):
def __init__(self):
print('Building the Parent class')
class Mother(object):
def __init__(self):
print('Building the Mother class')
class Child(Mother):
def __init__(self):
Parent.__init__(self)
Did you notice? Using super(), we wouldn't have such a problem:
class Parent(object):
def __init__(self):
print('Building the Parent class')
class Mother(object):
def __init__(self):
print('Building the Mother class')
class Child(Mother):
def __init__(self):
super().__init__()
The above code executes the constructor method regardless of the superclass the subclass is
inheriting from. When we need to extend methods from the superclass in the subclass, we can
also use super() to our advantage. Imagine we need to pass new parameters to an existing
method, we could do it this way:
class Parent(object):
def __init__(self, weight: float, height: float):
self.weight = weight
self.height = height
class Child(Parent):
def __init__(self, weight: float, height: float, hair: str):
super().__init__(weight, height)
self.hair = hair