Bird
Raised Fist0
Pythonprogramming~20 mins

Classes and objects in Python - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Master of Classes and Objects
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of method call with class and instance variables
What is the output of this Python code?
Python
class Car:
    wheels = 4
    def __init__(self, color):
        self.color = color

car1 = Car('red')
car2 = Car('blue')
car1.wheels = 3
print(car1.wheels, car2.wheels)
A3 4
B4 3
C3 3
D4 4
Attempts:
2 left
💡 Hint
Remember that instance variables override class variables for that instance only.
Predict Output
intermediate
2:00remaining
Output of method modifying instance variable
What will be printed after running this code?
Python
class Counter:
    def __init__(self):
        self.count = 0
    def increment(self):
        self.count += 1

c = Counter()
c.increment()
c.increment()
print(c.count)
AError
B1
C0
D2
Attempts:
2 left
💡 Hint
Each call to increment adds 1 to count.
Predict Output
advanced
2:00remaining
Output of class method and static method
What is the output of this code?
Python
class Example:
    @classmethod
    def class_method(cls):
        return 'class method called'

    @staticmethod
    def static_method():
        return 'static method called'

print(Example.class_method())
print(Example.static_method())
Astatic method called\nclass method called
Bclass method called\nstatic method called
CError at class_method call
DError at static_method call
Attempts:
2 left
💡 Hint
Class methods receive the class as first argument, static methods do not receive any implicit argument.
Predict Output
advanced
2:00remaining
Output of inheritance and method overriding
What will this code print?
Python
class Animal:
    def speak(self):
        return 'Animal sound'

class Dog(Animal):
    def speak(self):
        return 'Woof'

class Cat(Animal):
    pass

print(Dog().speak())
print(Cat().speak())
AAnimal sound\nAnimal sound
BError
CWoof\nAnimal sound
DWoof\nWoof
Attempts:
2 left
💡 Hint
Dog overrides speak, Cat uses the inherited method.
🧠 Conceptual
expert
2:00remaining
What error does this code raise?
What error will this code raise when run?
Python
class Person:
    def __init__(self, name):
        self.name = name

p = Person()
print(p.name)
ATypeError: __init__() missing 1 required positional argument: 'name'
BAttributeError: 'Person' object has no attribute 'name'
CNameError: name 'Person' is not defined
DNo error, prints None
Attempts:
2 left
💡 Hint
Check how the constructor is called and what arguments it requires.

Practice

(1/5)
1. What is the main purpose of a class in Python?
easy
A. To execute code immediately
B. To store data in variables only
C. To create a blueprint for objects
D. To perform mathematical calculations

Solution

  1. Step 1: Understand what a class represents

    A class is like a blueprint or template that defines how objects are created and what they can do.
  2. Step 2: Identify the role of a class

    Classes organize code by grouping data and functions that belong together, allowing creation of many objects from the same blueprint.
  3. Final Answer:

    To create a blueprint for objects -> Option C
  4. Quick Check:

    Class = blueprint for objects [OK]
Hint: Classes define blueprints; objects are instances [OK]
Common Mistakes:
  • Thinking classes run code immediately
  • Confusing classes with simple variables
  • Believing classes only store data
2. Which of the following is the correct way to define a class named Car in Python?
easy
A. class Car():
B. def Car():
C. function Car():
D. Car class:

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 Car(): uses class Car(): which is correct syntax. Others use wrong keywords or formats.
  3. Final Answer:

    class Car(): -> Option A
  4. Quick Check:

    Class definition starts with 'class' keyword [OK]
Hint: Use 'class ClassName():' to define a class [OK]
Common Mistakes:
  • Using 'def' instead of 'class'
  • Using 'function' keyword (not Python)
  • Missing 'class' keyword
3. What will be the output of this code?
class Dog():
    def __init__(self, name):
        self.name = name
    def bark(self):
        return f"{self.name} says Woof!"

my_dog = Dog("Buddy")
print(my_dog.bark())
medium
A. Error: missing self parameter
B. Buddy says Woof!
C. Dog says Woof!
D. Woof!

Solution

  1. Step 1: Understand the __init__ method

    The __init__ method sets the name attribute to "Buddy" when my_dog is created.
  2. Step 2: Analyze the bark method call

    The bark method returns a string using the dog's name, so it returns "Buddy says Woof!".
  3. Final Answer:

    Buddy says Woof! -> Option B
  4. Quick Check:

    Method uses self.name = Buddy [OK]
Hint: Methods use self to access object data [OK]
Common Mistakes:
  • Forgetting to pass 'self' in methods
  • Confusing class name with object name
  • Expecting method to print instead of return
4. Find the error in this class definition:
class Person():
    def __init__(self, name):
        name = name

p = Person("Alice")
print(p.name)
medium
A. Class name should be lowercase
B. Missing self in __init__ parameters
C. print(p.name) should be print(name)
D. Should assign to self.name, not name

Solution

  1. Step 1: Check attribute assignment in __init__

    The code assigns name = name, which only changes the local variable, not the object's attribute.
  2. Step 2: Correct assignment to object attribute

    It should be self.name = name to store the value in the object for later access.
  3. Final Answer:

    Should assign to self.name, not name -> Option D
  4. Quick Check:

    Use self.attribute = value to save data [OK]
Hint: Assign attributes with self.attribute = value [OK]
Common Mistakes:
  • Assigning to local variable instead of self.attribute
  • Forgetting self in method parameters
  • Trying to print undefined variables
5. You want to create a class BankAccount that stores an account holder's name and balance. It should have a method deposit(amount) that adds money to the balance only if the amount is positive. Which code correctly implements this?
hard
A. class BankAccount(): def __init__(self, name, balance=0): self.name = name self.balance = balance def deposit(self, amount): if amount > 0: self.balance += amount
B. class BankAccount(): def __init__(self, name): self.name = name balance = 0 def deposit(self, amount): self.balance = self.balance + amount
C. class BankAccount(): def __init__(self, name, balance=0): self.name = name self.balance = balance def deposit(self, amount): self.balance += amount
D. class BankAccount(): def __init__(self, name): self.name = name self.balance = 0 def deposit(self, amount): if amount >= 0: self.balance = amount

Solution

  1. Step 1: Check __init__ method for attributes

    class BankAccount(): def __init__(self, name, balance=0): self.name = name self.balance = balance def deposit(self, amount): if amount > 0: self.balance += amount correctly sets self.name and self.balance with a default balance of 0.
  2. Step 2: Verify deposit method logic

    class BankAccount(): def __init__(self, name, balance=0): self.name = name self.balance = balance def deposit(self, amount): if amount > 0: self.balance += amount adds amount to self.balance only if amount > 0, which matches the requirement.
  3. Final Answer:

    Correctly implements the class with proper attribute initialization and deposit validation -> Option A
  4. Quick Check:

    Check attribute setup and positive amount condition [OK]
Hint: Check attribute setup and validate input in methods [OK]
Common Mistakes:
  • Not using self.balance to store balance
  • Adding amount without checking if positive
  • Overwriting balance instead of adding
  • Missing default balance initialization