0% found this document useful (0 votes)
3 views51 pages

Read and Learn Python Chapter 3

Uploaded by

budak.j4h4t
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views51 pages

Read and Learn Python Chapter 3

Uploaded by

budak.j4h4t
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Read And Learn

Python
Chapter 3: Object-Oriented Programming & Error
Handling

An In-Depth Comprehensive Guide for Beginners


1. Introduction to Object-Oriented
Programming (OOP)

Up to this point, we have written code in a procedural style, focusing on functions


and sequential logic. Object-Oriented Programming (OOP) is a programming
paradigm that organizes software design around data, or objects, rather than
functions and logic. An object can be defined as a data field that has unique
attributes and behavior.

OOP focuses on the objects that developers want to manipulate rather than the
logic required to manipulate them. This approach to programming is well-suited for
programs that are large, complex and actively updated or maintained.

Classes vs. Objects

Think of a Class as a blueprint for a house. It contains the structural details.


An Object is the actual house built from that blueprint. You can build many
houses (objects) from a single blueprint (class).

2. Creating Classes and Objects

In Python, we use the class keyword to define a new class. Inside the class, we
define methods (functions belonging to the class) and attributes (variables
belonging to the class).
class Dog:
# The __init__ method is the constructor
def __init__(self, name, age):
[Link] = name # Attribute
[Link] = age # Attribute

def bark(self): # Method


return f"{[Link]} says woof!"

# Creating an Object (Instantiation)


my_dog = Dog("Rex", 3)
print(my_dog.bark())

The __init__ method is a special method called a constructor. It is automatically


called when a new instance of the class is created. The self parameter is a
reference to the current instance of the class, and is used to access variables that
belong to the class.

3. Inheritance: Reusing Code

Inheritance allows us to define a class that inherits all the methods and properties
from another class. The Parent class is the class being inherited from, also called
the base class. The Child class is the class that inherits from another class, also
called the derived class.
class Animal:
def __init__(self, species):
[Link] = species

def make_sound(self):
return "Some generic sound"

# Dog inherits from Animal


class GoldenRetriever(Animal):
def __init__(self, name):
super().__init__("Dog") # Call the parent constructor
[Link] = name

def make_sound(self): # Method Overriding


return "Bark! Bark!"

my_pet = GoldenRetriever("Buddy")
print(my_pet.species) # Inherited attribute
print(my_pet.make_sound()) # Overridden method

4. Error Handling: The Try-Except Block

Even if a statement or expression is syntactically correct, it may cause an error


when an attempt is made to execute it. Errors detected during execution are called
exceptions. Instead of letting the program crash, we can handle these exceptions
gracefully using try and except blocks.
try:
# Code that might raise an exception
result = 10 / 0
except ZeroDivisionError:
# Code that runs if the exception occurs
print("Error: Cannot divide by zero!")
except Exception as e:
# Catch-all for other exceptions
print(f"An unexpected error occurred: {e}")
finally:
# Code that runs regardless of an exception
print("Execution of the try-except block is complete.")

Handling errors is crucial for building robust applications that can survive
unexpected inputs or environmental failures (like a missing file or a broken network
connection).

5. Practice Exercises

To solidify your understanding of classes, inheritance, and exception handling,


complete the following 45 comprehensive exercises.
Exercise 1: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 1: Class Definition & Instantiation


class Robot_1:
pass

unit = Robot_1()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 2: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 2: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_2 = User(200)
print('User ID:', user_2.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 3: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 3: Class Methods


class Calculator:
def multiply(self, val):
return val * 5

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 4: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 4: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_4(BaseDevice):
pass

my_phone = Phone_4()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 5: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 5: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_5(Worker):
def get_role(self):
return 'Management Level 3'

boss = Manager_5()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 6: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 6: Basic Try-Except Block


try:
data = int('NotANumber_6')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 7: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 7: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[12]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 8: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 8: Class Definition & Instantiation


class Robot_8:
pass

unit = Robot_8()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 9: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 9: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_9 = User(900)
print('User ID:', user_9.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 10: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 10: Class Methods


class Calculator:
def multiply(self, val):
return val * 2

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 11: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 11: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_11(BaseDevice):
pass

my_phone = Phone_11()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 12: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 12: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_12(Worker):
def get_role(self):
return 'Management Level 1'

boss = Manager_12()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 13: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 13: Basic Try-Except Block


try:
data = int('NotANumber_13')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 14: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 14: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[19]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 15: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 15: Class Definition & Instantiation


class Robot_15:
pass

unit = Robot_15()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 16: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 16: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_16 = User(1600)
print('User ID:', user_16.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 17: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 17: Class Methods


class Calculator:
def multiply(self, val):
return val * 4

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 18: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 18: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_18(BaseDevice):
pass

my_phone = Phone_18()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 19: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 19: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_19(Worker):
def get_role(self):
return 'Management Level 2'

boss = Manager_19()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 20: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 20: Basic Try-Except Block


try:
data = int('NotANumber_20')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 21: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 21: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[26]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 22: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 22: Class Definition & Instantiation


class Robot_22:
pass

unit = Robot_22()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 23: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 23: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_23 = User(2300)
print('User ID:', user_23.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 24: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 24: Class Methods


class Calculator:
def multiply(self, val):
return val * 6

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 25: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 25: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_25(BaseDevice):
pass

my_phone = Phone_25()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 26: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 26: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_26(Worker):
def get_role(self):
return 'Management Level 3'

boss = Manager_26()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 27: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 27: Basic Try-Except Block


try:
data = int('NotANumber_27')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 28: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 28: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[33]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 29: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 29: Class Definition & Instantiation


class Robot_29:
pass

unit = Robot_29()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 30: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 30: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_30 = User(3000)
print('User ID:', user_30.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 31: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 31: Class Methods


class Calculator:
def multiply(self, val):
return val * 3

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 32: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 32: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_32(BaseDevice):
pass

my_phone = Phone_32()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 33: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 33: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_33(Worker):
def get_role(self):
return 'Management Level 1'

boss = Manager_33()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 34: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 34: Basic Try-Except Block


try:
data = int('NotANumber_34')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 35: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 35: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[40]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 36: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 36: Class Definition & Instantiation


class Robot_36:
pass

unit = Robot_36()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 37: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 37: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_37 = User(3700)
print('User ID:', user_37.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 38: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 38: Class Methods


class Calculator:
def multiply(self, val):
return val * 5

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Exercise 39: Inheritance Mechanics

Problem Statement: Develop a Python script that demonstrates the concept


of inheritance mechanics effectively.

Python Code Solution:

# Exercise 39: Inheritance Mechanics


class BaseDevice:
type = 'Electronics'

class Phone_39(BaseDevice):
pass

my_phone = Phone_39()
print('Inherited Type:', my_phone.type)

Detailed Explanation: This exercise tests your grasp of inheritance


mechanics. The child class inherits directly from the parent class. Even
though the child class is empty, it automatically has access to the attributes
and methods defined in the parent.
Exercise 40: Method Overriding

Problem Statement: Develop a Python script that demonstrates the concept


of method overriding effectively.

Python Code Solution:

# Exercise 40: Method Overriding


class Worker:
def get_role(self):
return 'General'

class Manager_40(Worker):
def get_role(self):
return 'Management Level 2'

boss = Manager_40()
print('Role:', boss.get_role())

Detailed Explanation: This exercise tests your grasp of method overriding.


Method overriding occurs when a child class provides a specific
implementation for a method that is already defined in its parent class,
effectively replacing the parent's behavior.
Exercise 41: Basic Try-Except Block

Problem Statement: Develop a Python script that demonstrates the concept


of basic try-except block effectively.

Python Code Solution:

# Exercise 41: Basic Try-Except Block


try:
data = int('NotANumber_41')
except:
print('Caught a conversion error safely!')

Detailed Explanation: This exercise tests your grasp of basic try-except


block. The try block contains code that throws a ValueError. The except
block immediately catches it, preventing a fatal crash and allowing the
program to continue executing.
Exercise 42: Handling Specific Exceptions

Problem Statement: Develop a Python script that demonstrates the concept


of handling specific exceptions effectively.

Python Code Solution:

# Exercise 42: Handling Specific Exceptions


try:
my_list = [1, 2, 3]
item = my_list[47]
except IndexError as e:
print('Index out of bounds detected.')

Detailed Explanation: This exercise tests your grasp of handling specific


exceptions. It is best practice to catch specific exceptions rather than using a
bare except clause. Here, we specifically anticipate and catch an IndexError
caused by accessing a non-existent list index.
Exercise 43: Class Definition & Instantiation

Problem Statement: Develop a Python script that demonstrates the concept


of class definition & instantiation effectively.

Python Code Solution:

# Exercise 43: Class Definition & Instantiation


class Robot_43:
pass

unit = Robot_43()
print('Instantiated object of type:', type(unit))

Detailed Explanation: This exercise tests your grasp of class definition &
instantiation. We define an empty class using the 'pass' keyword. We then
instantiate an object from this class and print its type, demonstrating how
Python creates custom object types.
Exercise 44: Instance Attributes

Problem Statement: Develop a Python script that demonstrates the concept


of instance attributes effectively.

Python Code Solution:

# Exercise 44: Instance Attributes


class User:
def __init__(self, u_id):
self.user_id = u_id

user_44 = User(4400)
print('User ID:', user_44.user_id)

Detailed Explanation: This exercise tests your grasp of instance attributes.


The __init__ method is utilized to initialize instance attributes. The 'self'
keyword assigns the passed argument specifically to the newly created
object's memory space.
Exercise 45: Class Methods

Problem Statement: Develop a Python script that demonstrates the concept


of class methods effectively.

Python Code Solution:

# Exercise 45: Class Methods


class Calculator:
def multiply(self, val):
return val * 2

calc = Calculator()
print('Result:', [Link](10))

Detailed Explanation: This exercise tests your grasp of class methods. We


define a method inside the class. Methods are simply functions bound to
objects. The 'self' parameter is required in the definition, but ignored during
the actual method call.
Conclusion

Congratulations on completing Chapter 3! You have taken a massive leap forward


by learning Object-Oriented Programming. You now know how to model real-world
concepts using Classes and Objects, how to structure code efficiently using
Inheritance, and how to protect your applications from crashing using Try-Except
error handling. In the final chapters, we will cover file input/output, external
modules, and advanced data manipulation.

You might also like