Bird
Raised Fist0
Pythonprogramming~20 mins

Property decorator usage 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
🎖️
Property Decorator Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of property getter
What is the output of this code?
Python
class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius

c = Circle(5)
print(c.radius)
AAttributeError
B5
CNone
DTypeError
Attempts:
2 left
💡 Hint
Look at how the property decorator allows access to the private variable.
Predict Output
intermediate
2:00remaining
Output after setting property value
What will be the output of this code?
Python
class Person:
    def __init__(self, name):
        self._name = name
    
    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, value):
        self._name = value

p = Person('Alice')
p.name = 'Bob'
print(p.name)
AAlice
BAttributeError
CBob
DNone
Attempts:
2 left
💡 Hint
The setter changes the private variable _name.
Predict Output
advanced
2:00remaining
Output with property and deleter
What is the output of this code?
Python
class Data:
    def __init__(self):
        self._value = 10
    
    @property
    def value(self):
        return self._value
    
    @value.deleter
    def value(self):
        del self._value

d = Data()
print(d.value)
del d.value
print(hasattr(d, '_value'))
A
TypeError
True
B
10
True
C
AttributeError
False
D
10
False
Attempts:
2 left
💡 Hint
Deleting the property deletes the underlying attribute.
Predict Output
advanced
2:00remaining
Error when setting read-only property
What error does this code raise?
Python
class ReadOnly:
    @property
    def data(self):
        return 42

r = ReadOnly()
r.data = 10
AAttributeError
BTypeError
CSyntaxError
DValueError
Attempts:
2 left
💡 Hint
Properties without a setter are read-only.
🧠 Conceptual
expert
2:00remaining
Why use property decorators?
Which of the following is the main advantage of using property decorators in Python classes?
AThey allow methods to be accessed like attributes, enabling controlled access to private variables.
BThey automatically make all class variables public.
CThey replace the need for constructors in classes.
DThey speed up the execution of class methods significantly.
Attempts:
2 left
💡 Hint
Think about how properties help with encapsulation and attribute access.

Practice

(1/5)
1.

What does the @property decorator do in a Python class?

easy
A. It converts a function into a static method.
B. It makes a method private.
C. It allows a method to be accessed like an attribute.
D. It deletes an attribute from the class.

Solution

  1. Step 1: Understand the role of @property

    The @property decorator lets you call a method without parentheses, like an attribute.
  2. Step 2: Compare options

    Only It allows a method to be accessed like an attribute. correctly describes this behavior. Other options describe unrelated features.
  3. Final Answer:

    It allows a method to be accessed like an attribute. -> Option C
  4. Quick Check:

    @property makes method act like attribute [OK]
Hint: Remember: @property hides () making method look like attribute [OK]
Common Mistakes:
  • Thinking @property makes method private
  • Confusing @property with @staticmethod
  • Believing @property deletes attributes
2.

Which of the following is the correct syntax to define a setter for a property named value?

class MyClass:
    @property
    def value(self):
        return self._value

    # What goes here?
easy
A. @setter.value\ndef value(self, val):\n self._value = val
B. @value.setter\ndef value(self, val):\n self._value = val
C. @value.set\ndef set_value(self, val):\n self._value = val
D. @value.setter\ndef set_value(self, val):\n self._value = val

Solution

  1. Step 1: Identify correct setter syntax

    The setter uses the property name with @value.setter and defines a method with the same name value.
  2. Step 2: Check method name and decorator

    @value.setter\ndef value(self, val):\n self._value = val correctly uses @value.setter and method value. Others use wrong decorator or method names.
  3. Final Answer:

    @value.setter\ndef value(self, val):\n self._value = val -> Option B
  4. Quick Check:

    Setter uses @propertyname.setter and same method name [OK]
Hint: Setter decorator is @propertyname.setter with same method name [OK]
Common Mistakes:
  • Using @setter.value instead of @value.setter
  • Changing method name in setter
  • Using @value.set instead of @value.setter
3.

What will be the output of the following code?

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value < 0:
            self._radius = 0
        else:
            self._radius = value

c = Circle(5)
c.radius = -3
print(c.radius)
medium
A. 0
B. 5
C. -3
D. AttributeError

Solution

  1. Step 1: Understand setter logic

    When setting radius, if value < 0, it sets _radius to 0, else to value.
  2. Step 2: Trace code execution

    Initial radius is 5. Then c.radius = -3 triggers setter, sets _radius to 0. Printing c.radius returns 0.
  3. Final Answer:

    0 -> Option A
  4. Quick Check:

    Setter sets negative radius to 0 [OK]
Hint: Setter changes negative radius to zero, so output is 0 [OK]
Common Mistakes:
  • Expecting original value 5 to remain
  • Printing -3 instead of 0
  • Confusing property with direct attribute
4.

Find the error in this code using property decorators and fix it.

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

    @property
    def name(self):
        return self._name

    @name.setter
    def set_name(self, value):
        self._name = value

p = Person('Alice')
p.name = 'Bob'
print(p.name)
medium
A. Change setter method name to name instead of set_name.
B. Remove the @property decorator.
C. Change self._name to self.name in setter.
D. Add a deleter method for name.

Solution

  1. Step 1: Identify setter method name mismatch

    The setter decorator @name.setter requires the method to be named name, but here it is set_name.
  2. Step 2: Fix method name

    Rename the setter method to name to match the property name and decorator.
  3. Final Answer:

    Change setter method name to name instead of set_name. -> Option A
  4. Quick Check:

    Setter method name must match property name [OK]
Hint: Setter method name must match property name exactly [OK]
Common Mistakes:
  • Using different method name for setter
  • Removing @property decorator mistakenly
  • Changing attribute name inside setter
5.

Consider a class that stores a temperature in Celsius internally but exposes it as Fahrenheit using property decorators. Which code correctly implements this?

class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius

    @property
    def fahrenheit(self):
        # Convert Celsius to Fahrenheit
        return (self._celsius * 9/5) + 32

    @fahrenheit.setter
    def fahrenheit(self, value):
        # Convert Fahrenheit to Celsius
        self._celsius = (value - 32) * 5/9

# Usage
temp = Temperature(0)
temp.fahrenheit = 212
print(round(temp._celsius))

What is the output?

hard
A. 32
B. 212
C. 0
D. 100

Solution

  1. Step 1: Understand property getter and setter

    The getter converts Celsius to Fahrenheit. The setter converts Fahrenheit back to Celsius and stores it.
  2. Step 2: Trace the code

    Initially, Celsius is 0. Setting temp.fahrenheit = 212 calls setter, converts 212°F to Celsius: (212-32)*5/9 = 100. Printing temp._celsius rounded gives 100.
  3. Final Answer:

    100 -> Option D
  4. Quick Check:

    Setter converts Fahrenheit to Celsius correctly [OK]
Hint: Setter converts Fahrenheit to Celsius, so 212°F = 100°C [OK]
Common Mistakes:
  • Confusing getter and setter conversions
  • Printing Fahrenheit instead of Celsius
  • Not rounding the output