Bird
Raised Fist0
Pythonprogramming~5 mins

Procedural vs object-oriented approach in Python

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

We use different ways to organize code so it is easier to understand and reuse. Procedural and object-oriented are two common ways to do this.

When you want to write simple step-by-step instructions for a task.
When you want to group data and actions together to model real-world things.
When you need to reuse code by creating objects with shared behavior.
When your program grows bigger and you want to keep it organized.
When you want to make your code easier to change or add new features.
Syntax
Python
Procedural approach:

def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

Object-oriented approach:

class Greeter:
    def __init__(self, name):
        self.name = name
    
    def greet(self):
        print(f"Hello, {self.name}!")

person = Greeter("Alice")
person.greet()

Procedural code is a list of instructions or functions that run one after another.

Object-oriented code groups data and functions inside classes to create objects.

Examples
Procedural: A simple function adds two numbers and prints the result.
Python
def add(a, b):
    return a + b

result = add(3, 4)
print(result)
Object-oriented: A class has a method to add numbers. We create an object and call the method.
Python
class Calculator:
    def add(self, a, b):
        return a + b

calc = Calculator()
print(calc.add(3, 4))
Procedural: Just a function to greet someone by name.
Python
def greet(name):
    print(f"Hi, {name}!")

greet("Bob")
Object-oriented: Person class stores name and has a greet method.
Python
class Person:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"Hi, {self.name}!")

p = Person("Bob")
p.greet()
Sample Program

This program shows both ways to greet someone. First, a simple function prints a greeting. Then, a class creates an object that prints a greeting.

Python
def procedural_greet(name):
    print(f"Hello from procedural, {name}!")

class Greeter:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"Hello from object-oriented, {self.name}!")

# Using procedural approach
procedural_greet("Alice")

# Using object-oriented approach
person = Greeter("Alice")
person.greet()
OutputSuccess
Important Notes

Procedural code is easier for small tasks but can get messy as programs grow.

Object-oriented code helps organize complex programs by bundling data and actions.

Both approaches can be mixed depending on what fits best.

Summary

Procedural programming uses functions and instructions step-by-step.

Object-oriented programming uses classes and objects to group data and behavior.

Choosing the right approach helps keep code clear and easy to maintain.

Practice

(1/5)
1. Which statement best describes the main difference between procedural and object-oriented programming in Python?
easy
A. Procedural programming is faster than object-oriented programming in all cases.
B. Procedural programming is only for small programs; object-oriented programming is for large programs.
C. Procedural programming cannot use variables; object-oriented programming can.
D. Procedural programming uses functions and step-by-step instructions; object-oriented programming uses classes and objects.

Solution

  1. Step 1: Understand procedural programming basics

    Procedural programming organizes code as functions and instructions executed in order.
  2. Step 2: Understand object-oriented programming basics

    Object-oriented programming organizes code using classes and objects that combine data and behavior.
  3. Final Answer:

    Procedural programming uses functions and step-by-step instructions; object-oriented programming uses classes and objects. -> Option D
  4. Quick Check:

    Procedural = functions, OOP = classes/objects [OK]
Hint: Procedural = steps; OOP = objects/classes [OK]
Common Mistakes:
  • Thinking procedural can't use variables
  • Believing OOP is always slower
  • Confusing program size with programming style
2. Which of the following is the correct way to define a class in Python?
easy
A. def MyClass(): pass
B. class MyClass(): pass
C. function MyClass() {}
D. class MyClass[]: pass

Solution

  1. Step 1: Recall Python class syntax

    In Python, classes are defined using the keyword class followed by the class name and parentheses.
  2. Step 2: Check each option

    class MyClass(): pass uses correct Python syntax. def MyClass(): pass uses def which defines a function, not a class. function MyClass() {} uses JavaScript syntax. class MyClass[]: pass uses invalid brackets.
  3. Final Answer:

    class MyClass(): pass -> Option B
  4. Quick Check:

    Python classes start with 'class' keyword [OK]
Hint: Classes start with 'class' keyword in Python [OK]
Common Mistakes:
  • Using def instead of class
  • Using wrong brackets [] instead of ()
  • Confusing Python with other languages syntax
3. What will be the output of this Python code?
def greet(name):
    return f"Hello, {name}!"

class Person:
    def __init__(self, name):
        self.name = name
    def greet(self):
        return greet(self.name)

p = Person("Anna")
print(p.greet())
medium
A. TypeError
B. Hello, name!
C. Hello, Anna!
D. AttributeError

Solution

  1. Step 1: Understand the procedural function greet

    The function greet(name) returns the string "Hello, {name}!" with the given name.
  2. Step 2: Understand the Person class and method call

    The Person class stores the name and its greet method calls the procedural greet function with self.name. Creating p with name "Anna" and calling p.greet() returns "Hello, Anna!".
  3. Final Answer:

    Hello, Anna! -> Option C
  4. Quick Check:

    Class method calls procedural function correctly [OK]
Hint: Class method calls function with self.name [OK]
Common Mistakes:
  • Confusing variable name with string 'name'
  • Expecting error due to mixing styles
  • Forgetting to use self.name
4. Identify the error in this code that mixes procedural and object-oriented styles:
class Calculator:
    def add(self, a, b):
        return a + b

result = Calculator.add(3, 4)
print(result)
medium
A. Missing self argument when calling add method
B. Class Calculator is not defined
C. add method should not return a value
D. print statement syntax error

Solution

  1. Step 1: Understand method call on class vs instance

    The add method is an instance method requiring a self parameter. Calling Calculator.add(3, 4) misses the self argument.
  2. Step 2: Correct usage

    To fix, create an instance: calc = Calculator() then call calc.add(3, 4). This passes self automatically.
  3. Final Answer:

    Missing self argument when calling add method -> Option A
  4. Quick Check:

    Instance methods need self, call via instance [OK]
Hint: Call instance methods on object, not class [OK]
Common Mistakes:
  • Calling instance method directly on class
  • Ignoring self parameter
  • Assuming methods are static by default
5. You want to convert this procedural code into an object-oriented style. Which class design correctly encapsulates the data and behavior?
# Procedural code
def area_rectangle(width, height):
    return width * height

w = 5
h = 3
print(area_rectangle(w, h))
hard
A. class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height
B. class Rectangle: def area(width, height): return width * height
C. class Rectangle: def __init__(self): pass def area(self): return width * height
D. class Rectangle: def __init__(self, width, height): return width * height

Solution

  1. Step 1: Identify data and behavior to encapsulate

    The procedural code uses width and height as data and area_rectangle as behavior. In OOP, these should be inside a class.
  2. Step 2: Check class options for correct encapsulation

    class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height stores width and height as instance variables and defines area() method using them. Other options either miss self, lack data storage, or misuse return in constructor.
  3. Final Answer:

    class Rectangle with __init__ storing width and height, and area method using them -> Option A
  4. Quick Check:

    OOP encapsulates data and behavior in class [OK]
Hint: Store data in __init__, use methods for behavior [OK]
Common Mistakes:
  • Not using self for instance variables
  • Returning values from __init__
  • Defining methods without self parameter