Bird
Raised Fist0
Pythonprogramming~20 mins

Public attributes 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
🎖️
Public Attributes Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of accessing a public attribute
What is the output of this code?
Python
class Car:
    def __init__(self, brand):
        self.brand = brand

my_car = Car('Toyota')
print(my_car.brand)
AAttributeError
Bcar.brand
CNone
DToyota
Attempts:
2 left
💡 Hint
Public attributes can be accessed directly using the object name.
Predict Output
intermediate
2:00remaining
Changing a public attribute value
What will be printed after changing the public attribute?
Python
class Person:
    def __init__(self, name):
        self.name = name

p = Person('Alice')
p.name = 'Bob'
print(p.name)
AAlice
BNone
CBob
DAttributeError
Attempts:
2 left
💡 Hint
Public attributes can be changed directly.
Predict Output
advanced
2:00remaining
Accessing a public attribute from outside the class
What is the output of this code?
Python
class Book:
    def __init__(self, title):
        self.title = title

b = Book('Python 101')
print(b.title)
APython 101
BNone
CAttributeError
Dbook.title
Attempts:
2 left
💡 Hint
Public attributes are accessible from outside the class.
Predict Output
advanced
2:00remaining
Effect of deleting a public attribute
What happens when you run this code?
Python
class Animal:
    def __init__(self, species):
        self.species = species

pet = Animal('Dog')
del pet.species
print(pet.species)
AAttributeError
BSyntaxError
CNone
DDog
Attempts:
2 left
💡 Hint
Deleting a public attribute removes it from the object.
🧠 Conceptual
expert
2:00remaining
Understanding public attribute behavior in inheritance
Given this code, what is the output?
Python
class Parent:
    def __init__(self):
        self.value = 10

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.value = 20

obj = Child()
print(obj.value)
ANone
B20
C10
DAttributeError
Attempts:
2 left
💡 Hint
Child class overrides the public attribute after calling the parent constructor.

Practice

(1/5)
1. What is a public attribute in a Python class?
easy
A. An attribute that can be accessed and changed from outside the class
B. An attribute that is hidden and cannot be accessed outside the class
C. A method that runs automatically when an object is created
D. A special function to delete an object

Solution

  1. Step 1: Understand attribute visibility

    Public attributes are designed to be accessed and modified from outside the class.
  2. Step 2: Compare options

    An attribute that can be accessed and changed from outside the class correctly describes public attributes. Options A, B, and D describe other concepts.
  3. Final Answer:

    An attribute that can be accessed and changed from outside the class -> Option A
  4. Quick Check:

    Public attribute = accessible outside [OK]
Hint: Public means anyone can access or change it [OK]
Common Mistakes:
  • Confusing public with private attributes
  • Thinking methods are attributes
  • Mixing up constructors with attributes
2. Which of the following is the correct way to create a public attribute name inside a Python class constructor?
easy
A. self->name = value
B. self.name = value
C. name = self.value
D. def name(self):

Solution

  1. Step 1: Recall syntax for public attributes

    Inside __init__, public attributes are created by assigning to self.attribute_name.
  2. Step 2: Check each option

    self.name = value uses correct syntax: self.name = value. Others are invalid Python syntax or wrong usage.
  3. Final Answer:

    self.name = value -> Option B
  4. Quick Check:

    Use self.attribute = value [OK]
Hint: Use self.attribute = value inside __init__ [OK]
Common Mistakes:
  • Using def instead of assignment
  • Wrong arrow syntax like self->name
  • Assigning attribute to name instead of self.name
3. What will be the output of this code?
class Dog:
    def __init__(self, name):
        self.name = name

my_dog = Dog('Buddy')
print(my_dog.name)
medium
A. Dog
B. Error
C. my_dog
D. Buddy

Solution

  1. Step 1: Understand attribute assignment

    The constructor sets self.name to the value passed, which is 'Buddy'.
  2. Step 2: Print the attribute value

    Printing my_dog.name outputs 'Buddy'.
  3. Final Answer:

    Buddy -> Option D
  4. Quick Check:

    Print attribute value = Buddy [OK]
Hint: Print object.attribute to see stored value [OK]
Common Mistakes:
  • Expecting class name instead of attribute value
  • Confusing object name with attribute
  • Thinking it causes an error
4. Find the error in this code that tries to create a public attribute age:
class Person:
    def __init__(self, age):
        age = age

p = Person(30)
print(p.age)
medium
A. The attribute should be assigned to self.age, not age
B. The print statement should be print(age)
C. The constructor is missing a return statement
D. The class name should be lowercase

Solution

  1. Step 1: Check attribute assignment

    Assigning age = age only creates a local variable, not an attribute of the object.
  2. Step 2: Correct attribute assignment

    It should be self.age = age to create a public attribute accessible outside.
  3. Final Answer:

    The attribute should be assigned to self.age, not age -> Option A
  4. Quick Check:

    Use self.attribute = value to create public attribute [OK]
Hint: Always assign attributes to self.attribute inside __init__ [OK]
Common Mistakes:
  • Assigning to local variable instead of self.attribute
  • Trying to print variable not attached to object
  • Thinking constructor needs return
5. You want to create a class Car that stores the public attributes make and year. Which code correctly creates these attributes and allows access to them?
hard
A. class Car: def __init__(self, make, year): self.make = make year = self.year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year)
B. class Car: def __init__(self, make, year): make = self.make year = self.year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year)
C. class Car: def __init__(self, make, year): self.make = make self.year = year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year)
D. class Car: def __init__(self, make, year): self.make = make self.year = year my_car = Car('Toyota', 2020) print(make, year)

Solution

  1. Step 1: Check attribute assignments

    class Car: def __init__(self, make, year): self.make = make self.year = year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year) correctly assigns self.make and self.year to the passed values.
  2. Step 2: Check attribute access

    class Car: def __init__(self, make, year): self.make = make self.year = year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year) prints my_car.make and my_car.year, which are valid public attributes.
  3. Final Answer:

    class Car: def __init__(self, make, year): self.make = make self.year = year my_car = Car('Toyota', 2020) print(my_car.make, my_car.year) -> Option C
  4. Quick Check:

    Assign and access via self.attribute and object.attribute [OK]
Hint: Assign attributes to self and access via object.attribute [OK]
Common Mistakes:
  • Assigning attributes backwards (make = self.make)
  • Accessing attributes without object prefix
  • Mixing local variables with attributes