Bird
Raised Fist0
Pythonprogramming~10 mins

Property decorator usage in Python - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a property method named name.

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

    @[1]
    def name(self):
        return self._name
Drag options to blanks, or click blank then click option'
Aclassmethod
Bstaticmethod
Cproperty
Dabstractmethod
Attempts:
3 left
💡 Hint
Common Mistakes
Using @staticmethod or @classmethod instead of @property.
Forgetting the @ symbol before the decorator.
2fill in blank
medium

Complete the code to define a setter for the name property.

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

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

    @name.[1]
    def name(self, value):
        self._name = value
Drag options to blanks, or click blank then click option'
Agetter
Bproperty
Cdeleter
Dsetter
Attempts:
3 left
💡 Hint
Common Mistakes
Using @name.getter instead of @name.setter.
Using @property again instead of @name.setter.
3fill in blank
hard

Fix the error in the code by completing the property getter method correctly.

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

    @property
    def radius(self):
        return self.[1]
Drag options to blanks, or click blank then click option'
Aself._radius
Bradius
CRadius
D_radius
Attempts:
3 left
💡 Hint
Common Mistakes
Returning self.radius causes infinite recursion.
Using incorrect variable names like Radius.
4fill in blank
hard

Fill both blanks to create a property age with a getter and a deleter.

Python
class User:
    def __init__(self, age):
        self._age = age

    @[1]
    def age(self):
        return self._age

    @age.[2]
    def age(self):
        del self._age
Drag options to blanks, or click blank then click option'
Aproperty
Bsetter
Cdeleter
Dgetter
Attempts:
3 left
💡 Hint
Common Mistakes
Using @age.setter instead of @age.deleter for deletion.
Forgetting to use @property for the getter.
5fill in blank
hard

Fill all three blanks to create a property score with getter, setter, and deleter methods.

Python
class Game:
    def __init__(self, score):
        self._score = score

    @[1]
    def score(self):
        return self._score

    @score.[2]
    def score(self, value):
        self._score = value

    @score.[3]
    def score(self):
        del self._score
Drag options to blanks, or click blank then click option'
Aproperty
Bsetter
Cdeleter
Dgetter
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up setter and deleter decorators.
Forgetting to use @property for the getter.

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