Bird
Raised Fist0
Pythonprogramming~5 mins

Public attributes 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

Public attributes let you store and access information inside an object easily. They are open for anyone to read or change.

When you want to keep simple information about an object that everyone can see and update.
When you create a class to represent something like a person, car, or book and want to store details like name or color.
When you want to quickly share data inside your program without hiding it.
When you are learning about classes and want to understand how objects hold data.
When you want to change or check an object's details directly without special methods.
Syntax
Python
class ClassName:
    def __init__(self, attribute1, attribute2):
        self.attribute1 = attribute1  # public attribute
        self.attribute2 = attribute2  # public attribute

Public attributes are defined inside the __init__ method using self.attribute_name.

They can be accessed or changed from outside the class using object.attribute_name.

Examples
This example shows a Dog class with public attributes name and age. We create a dog and access/change its attributes directly.
Python
class Dog:
    def __init__(self, name, age):
        self.name = name  # public attribute
        self.age = age    # public attribute

my_dog = Dog('Buddy', 3)
print(my_dog.name)  # prints Buddy
my_dog.age = 4
print(my_dog.age)   # prints 4
Here, the Car class has a public attribute color. We change the car's color after creating it.
Python
class Car:
    def __init__(self, color):
        self.color = color  # public attribute

car1 = Car('red')
print(car1.color)  # prints red
car1.color = 'blue'
print(car1.color)  # prints blue
Sample Program

This program creates a Person object with public attributes name and age. It prints the values, changes the age, and prints the new age.

Python
class Person:
    def __init__(self, name, age):
        self.name = name  # public attribute
        self.age = age    # public attribute

person1 = Person('Alice', 30)
print(f'Name: {person1.name}')
print(f'Age: {person1.age}')

# Changing public attribute
person1.age = 31
print(f'New Age: {person1.age}')
OutputSuccess
Important Notes

Public attributes can be accessed and changed from anywhere in your code.

Be careful when changing public attributes because it can affect other parts of your program.

For more control, you can learn about private attributes later, but public attributes are great for simple use.

Summary

Public attributes store information inside objects that anyone can access or change.

They are easy to use and good for simple data storage in classes.

Use self.attribute_name inside __init__ to create public attributes.

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