This Object-Oriented Programming (OOP) exercise aims to help you to learn and practice OOP concepts. All questions are tested on Python 3.
Python Object-oriented programming (OOP) is based on the concept of “objects,” which can contain data and code: data in the form of instance variables (often known as attributes or properties), and code, in the form method. I.e., Using OOP, we encapsulate related properties and behaviors into individual objects.
What is included in this Python OOP exercise?
This OOP classes and objects exercise includes 10 coding questions, programs, and challenges. All solutions are tested on Python 3.
This exercise covers questions on the following topics:
- Class and Object creation
- Instance variables and Methods, and Class level attributes
- Model systems with class inheritance i.e., inherit From Other Classes
- Parent Classes and Child Classes
- Extend the functionality of Parent Classes using Child class
- Object checking
When you complete each question, you will become more familiar with Object-Oriented Programming. Please let us know if you have any alternative solutions; it will help other developers.
Use Online Code Editor to solve exercise questions.
Refer:
Table of contents
- OOP Exercise 1: Create a Class with instance attributes
- OOP Exercise 2: Create a Vehicle class without any variables and methods
- OOP Exercise 3: Create a child class Bus that will inherit all of the variables and methods of the Vehicle class
- OOP Exercise 4: Class Inheritance
- OOP Exercise 5: Define a property that must have the same value for every class instance (object)
- OOP Exercise 6: Class Inheritance
- OOP Exercise 7: Check type of an object
- OOP Exercise 8: Determine if School_bus is also an instance of the Vehicle class
- OOP Exercise 9: Check object is a subclass of a particular class
- OOP Exercise 10: Calculate the area of different shapes using OOP
OOP Exercise 1: Create a Class with instance attributes
Write a Python program to create a Vehicle class with max_speed and mileage instance attributes.
Refer:
Show Solution
OOP Exercise 2: Create a Vehicle class without any variables and methods
Show Solution
OOP Exercise 3: Create a child class Bus that will inherit all of the variables and methods of the Vehicle class
Given:
Create a Bus object that will inherit all of the variables and methods of the parent Vehicle class and display it.
Expected Output:
Vehicle Name: School Volvo Speed: 180 Mileage: 12
Refer: Inheritance in Python
Show Solution
OOP Exercise 4: Class Inheritance
Given:
Create a Bus class that inherits from the Vehicle class. Give the capacity argument of Bus.seating_capacity() a default value of 50.
Use the following code for your parent Vehicle class.
Expected Output:
The seating capacity of a bus is 50 passengers
Refer:
Show Hint
- First, use method overriding.
- Next, use default method argument in the
seating_capacity()method definition of a bus class.
Show Solution
OOP Exercise 5: Define a property that must have the same value for every class instance (object)
Define a class attribute”color” with a default value white. I.e., Every Vehicle should be white.
Use the following code for this exercise.
Expected Output:
Color: White, Vehicle name: School Volvo, Speed: 180, Mileage: 12 Color: White, Vehicle name: Audi Q5, Speed: 240, Mileage: 18
Refer: Class Variable in Python
Show Hint
Define a color as a class variable in a Vehicle class
Show Solution
Variables created in __init__() are called instance variables. An instance variable’s value is specific to a particular instance of the class. For example, in the solution, all Vehicle objects have a name and a max_speed, but the values of the name and max_speed variables will vary depending on the Vehicle instance.
On the other hand, a class variable is shared between all class instances. You can define a class attribute by assigning a value to a variable name outside of __init__().
OOP Exercise 6: Class Inheritance
Given:
Create a Bus child class that inherits from the Vehicle class. The default fare charge for any vehicle is its seating capacity multiplied by 100 (seating capacity * 100).
If the vehicle is a Bus instance, we need to add an extra 10% to the full fare as a maintenance charge. Therefore, the total fare for a Bus instance will be the final amount, calculated as total fare plus 10% of the total fare. (final amount = total fare + 10% of the total fare.)
Note: The bus seating capacity is 50, so the final fare amount should be 5500.
Use the following code for your parent Vehicle class. We need to access the parent class from within a method of a child class.
Expected Output:
Total Bus fare is: 5500.0
Show Hint
- You need to override the
fare()method of theVehicleclass in theBusclass. - Use
super()function within a child class to call methods of a parent (or super) class.
Method overriding lets a subclass provide its own version of a method that its superclass already has. It allows the subclass to customize or specialize the behavior inherited from the superclass.
Show Solution
OOP Exercise 7: Check type of an object
Write a program to determine which class a given Bus object belongs to.
Given:
Show Hint
Use Python’s built-in function type().
Show Solution
OOP Exercise 8: Determine if School_bus is also an instance of the Vehicle class
Given:
Show Hint
Show Solution
OOP Exercise 9: Check object is a subclass of a particular class
Given:
class Animal:
pass
class Dog(Animal):
pass
class Puppy(Dog):
pass
class Cat:
passCode language: Python (python)
Write a code to check the following
- Dog is a subclass of Animal? –> True
- Animal is a subclass of Dog? –> False
- Cat is a subclass of Animal? –> False
- Puppy is a subclass of Animal –> True
Show Hint
Use the issubclass() function. The issubclass(potential_subclass, potential_superclass) returns True if the first argument is a subclass (or the same class) of the second argument, and False otherwise.
Show Solution
class Animal:
pass
class Dog(Animal):
pass
class Puppy(Dog):
pass
class Cat:
pass
print(issubclass(Dog, Animal)) # Output: True (Dog is a subclass of Animal)
print(issubclass(Animal, Dog)) # Output: False (Animal is not a subclass of Dog)
print(issubclass(Cat, Animal)) # Output: False (Cat is not related to Animal)
print(issubclass(Puppy, Animal)) # Output: True (Puppy inherits from Dog, which inherits from Animal)Code language: Python (python)OOP Exercise 10: Calculate the area of different shapes using OOP
Given:
You have given a Shape class and subclasses Circle and Square. The parent class (Shape) has a area() method.
Now, Write a OOP code to calculate the area of each shapes (each subclass must write its own implementation of area() method to calculates its area).
Use the following code
Refer:
Show Hint
- Use Method Overloading.
- The core idea is that the same method name can have different implementations depending on the class of the object.
Polymorphism lets you treat objects of different classes in a uniform way. Imagine you have a Shape class, and then you have subclasses like Circle, Square, and Triangle. Each of these shapes has an area() method, but the way you calculate the area is different for each shape.
Show Solution
Also, See: Python OOP Interview Questions

Thank you for putting this together and sharing. It’s a really helpful practice/revision exercise, and I learnt new things.
thanks man for the assistance you make me understand oop
Moving way too fast. By the time i got to 5, i forgot how to do 1.
Thank you Vishal sir, for providing the exercises, As a beginner these exercises have helped us a lot.
class Vehicle:
def __init__(self, max_speed, mileage):
self.max_speed = max_speed
self.mileage = mileage
def seating_capacity(self, capacity):
return f”The seating capacity of a {self.name} is {capacity} passenger”
class Vehicle:
def __init__(self, name, max_speed, mileage):
self.name = name
self.max_speed = max_speed
self.mileage = mileage
def seating_capacity(self, capacity):
return f”The seating capacity of a {self.name} is {capacity} passengers”
class Bus(Vehicle):
# assign default value to capacity
def seating_capacity(self, capacity=50):
return super().seating_capacity(capacity=50)
class Vehicle:
# Class attribute
colour = “White”
def __init__(self, name, max_speed, mileage):
self.name = name
self.max_speed = max_speed
self.mileage = mileage
class Bus(Vehicle):
pass
class Car(Vehicle):
pass
School_bus = Bus(“School Volvo”, 180, 12)
print(School_bus.colour, School_bus.name, “Speed:”, School_bus.max_speed, “Mileage:”, School_bus.mileage)
car = Car(“Audi Q5”, 180, 18)
print(car.colour, car.name, “Speed:”, car.max_speed, “Mileage:”, car.mileage)
class Vehicle:
def __init__(self, name, mileage, capacity):
self.name = name
self.mileage = mileage
self.capacity = capacity
def fare(self):
return self.capacity * 100
class Bus(Vehicle):
def fare(self):
return 1.1*self.capacity*100
School_bus = Bus(“School Volvo”, 12, 50)
print(“Total Bus fare is:”, School_bus.fare())
from pyexpat import model
color = “white”
capacity = 1
fare = capacity * 100
class Vehicle:
def __init__(self, name, max_speed, mileage, capacity):
self.max_speed = max_speed
self.mileage = mileage
self.name = name
self.capacity = capacity
def fare(self):
return self.capacity * 100
model1x = Vehicle(“Toyota”, 240, 23000, 5)
class Bus(Vehicle):
def __init__(self, name, max_speed, mileage, capacity):
super().__init__(name, max_speed, mileage, capacity)
def fare(self):
#return Vehicle.fare(self) * 10 / 100 + Vehicle.fare(self) or
amount = super().fare()
amount += amount * 10 / 100
return amount
bus1 = Bus(“daf”, 149, 33000, 50)
# bus_fare = bus1.fare()
# print(f”total bus fare is :${int(bus_fare*(10/100)+bus_fare)}”)
print(bus1.fare())
#Exercise 3class Vehicle:
def __init__(self ,Max_speed, Mileage):
self.Max_speed = Max_speed
self.Mileage = Mileage
Bus = Vehicle(180, 12)
print("vehicle name : school volvo","\n", "speed : ",
Bus.Max_speed,"\n", "Mileage :", Bus.Mileage)
About exercise 4:
in line
-> return super().seating_capacity(capacity=50)I think it should be
-> return super().seating_capacity(capacity)If we set 50 in a method call, then it will be impossible to set different parameters.
For example, if we call:
b = Bus('bus', 80, 1000)print(b.seating_capacity(30)) -> output will be 50
Yes indeed. It should be -> return super().seating_capacity(capacity)
which will allow for setting a value for capacity as in: -> b.seating_capacity(120)
Exercise 7, is this a good practice?
class Vehicle:def __init__(self, name, mileage, capacity):
self.name = name
self.mileage = mileage
self.capacity = capacity
class Bus(Vehicle):
@staticmethod
def which_class():
return __class__.__name__
School_bus = Bus("School Volvo", 12, 50)
print(School_bus.which_class())
Write a function to calculate resistance and capacitance (i.e. the function takes current and voltage as data and returns resistance and capacitance)
Solve it
class circuit:def __init__(self,voltage,current):
self.voltage=voltage
self.current= current
def resistance(self):
return self.voltage/ self.current
def capacitance(self):
return self.voltage/(self.current * 2 * 3.14159265359 )
a= circuit(20,9)
r=a.resistance()
c= a.capacitance()
print(f”resistance is {r} ohms and capacitance is {c} f.”)
Exercise 5 without a class variable, only with instance variable:
class Vehicle:def __init__(self, name, max_speed, mileage):
self.color = "White"
self.name = name
self.max_speed = max_speed
self.mileage = mileage
def __str__(self):
return f"Color: {self.color}, Vehicle name: {self.name}, Speed: {self.max_speed}, Mileage: {self.mileage}"
class Bus(Vehicle):
pass
class Car(Vehicle):
pass
bus = Bus("School Volvo", 180, 12)
car = Car("Audi Q5", 240, 18)
print(bus)
print(car)
Kindly check and see if I would encounter any problems using this approach.
class vehicle:color="white"
def __init__(self,name,max_speed,mileage,capacity):
self.name=name
self.max_speed=max_speed
self.milage=mileage
self.capacity=capacity
def fare(self):
fare= self.capacity*100
totalFare= fare + (10/100*fare)
return totalFare
def desc_vehicle(self):
print(f"Color:{self.color} Vehicle Name: {self.name} Speed:{self.max_speed} Mileage: {self.milage} ")
class bus(vehicle):
pass
class car(vehicle):
pass
class vehicle:color="white"
def __init__(self,name,max_speed,mileage,capacity):
self.name=name
self.max_speed=max_speed
self.milage=mileage
self.capacity=capacity
def fare(self):
fare= self.capacity*100
totalFare= fare + (10/100*fare)
return totalFare
def desc_vehicle(self):
print(self.capacity,"is capacity",self.name,"is name",self.max_speed,"speed",self.milage, "milage",self.capacity, "capacity")
class bus(vehicle):
pass
class car(vehicle):
pass
a=car(80,"ko",64,32)
a.desc_vehicle()
This is good approach, clean code, good practice.
OUTPUT:
An alternative way of doing exercise 6:
I have this example.6 I was wondering if it is correct too?
this solution is not good because :
in the question, we are asked to add 10% to the total fare which comes from the superclass Vehicle, so when you do
return 1.1*self.capacity*100the total is not based on Vehicle and if I change 100 in Vehicle, it will not change in Bus
you need to use super() so that the Total is taken from Vehicle, and then you add the 10%
you can do something like
this will allways use the total from Vehicle and add 10% , so if we change the 100 in Vehicle, it will calculate the 10% based on the new total.
Hope that was clear, sorry if the exemples were not good
Exercise 6 Alternative Code:
“return super().fare() + 0.10*super().fare()”, this will call parent method twice, so better we can do with this way..
def fare(self):
orgfare = super().fare()
return (orgfare + orgfare * 0.1)
Will I run into any problems if I just did this for Ex. 4?
Call the function as
print(bus.seating_capacity(50))output:
The seating capacity of a bus is 50 passengers
NO problem!
Thanks a ton for the well-curated structure.
For exercise 6 I don’t know if this is good code, code but it works well!!
I had the same idea, but I think the key is that since bus fare depends on vehicle fare, if the formula for vehicle changes (while bus remains +10% of vehicle fare) and you need to update your code base, the change propagates without having to modify both classes
Wouldn’t the code used in the solution also change if the Vehicle formula changes? In other words, doesn’t the code below also depend on the vehicle fare because it’s still inheriting the Vehicle’s “fare” instance
very good codes
Very useful. I started learning python. please let me know if you have more excercise like this. Thanks for your effort.
Thank you very much.
Thanks a lot Brother !
Thank’s a lot, I enjoyed the tasks.
You’re welcome, Lilit.
HI Vishal please post more questions on oops
Thanks. learnt lots
found a cleaner method for exercise 7
Ans_3:
This was a fun exercise!
That was interesting overview.. I am searching more though for oop…
Thanks for support…
thank you vishal sir it’s very help me
I am glad it helped you, Dhruv.
Thank you very much Vishal, it’s a very instructive challenge
I am glad it helped you.
thank you…Awesome learning experience
Exercise Question 6: Class Inheritance
In question 4, shouldn’t it be:
so that the capacity provided when, say,
School_bus.seating_capacity(60)is called would get passed to thesuper().seating_capacity()correct Paul ,
Exercise Question 6:
The help text states that outcome should be 5550.0 but the solution code and expected output are both 5500.0.
Hey Ryan, Thank you for noticing the typing mistake. Now, I have fixed the typing mistake.
Exercise Question 8: Determine if Bus is also an instance of the Vehicle class
need correction: Determine if School_bus is also an instance of the Vehicle class?
Thank you for your correction.