Bird
Raised Fist0
Pythonprogramming~10 mins

Class attributes in Python - Step-by-Step Execution

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
Concept Flow - Class attributes
Define Class with Class Attribute
Create Instance 1
Access Class Attribute
Create Instance 2
Access Class Attribute
Modify Class Attribute via Class
All Instances See Updated Value
Class attributes are shared by all instances of a class. Changing them via the class affects all instances.
Execution Sample
Python
class Dog:
    species = "Canine"

dog1 = Dog()
dog2 = Dog()
print(dog1.species)
print(dog2.species)
This code defines a class attribute 'species' and shows that two instances share it.
Execution Table
StepActionVariable/AttributeValueNote
1Define class DogDog.species"Canine"Class attribute set
2Create dog1 instancedog1.species"Canine"Instance accesses class attribute
3Create dog2 instancedog2.species"Canine"Instance accesses class attribute
4Print dog1.speciesOutput"Canine"Prints class attribute
5Print dog2.speciesOutput"Canine"Prints class attribute
6Modify Dog.species = "Wolf"Dog.species"Wolf"Class attribute changed
7Print dog1.speciesOutput"Wolf"Instance sees updated class attribute
8Print dog2.speciesOutput"Wolf"Instance sees updated class attribute
💡 All instances share the class attribute; changes via class reflect on all instances.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 6Final
Dog.species"Canine""Canine""Canine""Wolf""Wolf"
dog1.speciesN/A"Canine""Canine""Wolf""Wolf"
dog2.speciesN/AN/A"Canine""Wolf""Wolf"
Key Moments - 3 Insights
Why do dog1 and dog2 both show the same species value?
Because species is a class attribute shared by all instances, as shown in steps 2 and 3 of the execution_table.
What happens if we change the class attribute via the class itself?
All instances see the updated value, as shown in step 6 where Dog.species changes, and steps 7 and 8 where dog1 and dog2 reflect the new value.
If we change the attribute on one instance, does it affect others?
No, changing an attribute on an instance creates an instance attribute that hides the class attribute for that instance only. This example does not show that, but the execution_table clarifies class attribute sharing.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is dog1.species after step 3?
AUndefined
B"Wolf"
C"Canine"
DError
💡 Hint
Check the value of dog1.species in the variable_tracker after step 3.
At which step does the class attribute Dog.species change?
AStep 6
BStep 2
CStep 4
DStep 8
💡 Hint
Look at the Action column in the execution_table for the modification of Dog.species.
If we set dog1.species = "Fox", what would dog2.species be?
A"Fox"
B"Wolf"
C"Canine"
DError
💡 Hint
Remember class attributes are shared unless overridden on an instance; see key_moments for explanation.
Concept Snapshot
Class attributes are variables shared by all instances.
Defined inside the class but outside methods.
Instances access them unless overridden.
Changing via class changes for all instances.
Changing on instance creates instance attribute.
Full Transcript
This visual trace shows how class attributes work in Python. We define a class Dog with a class attribute species set to "Canine". When we create two instances dog1 and dog2, both access the same class attribute. Printing species from either instance shows "Canine". When we change Dog.species to "Wolf", both instances see the updated value. This is because class attributes are shared by all instances. Changing the attribute on the class affects all instances, but changing it on one instance only affects that instance. This helps understand how data can be shared or customized in classes.

Practice

(1/5)
1. What is a class attribute in Python?
class Car:
wheels = 4
Here, what does wheels represent?
easy
A. A value shared by all Car objects
B. A value unique to each Car object
C. A method inside the Car class
D. A variable defined inside a method

Solution

  1. Step 1: Identify the attribute location

    The attribute wheels is defined inside the class but outside any method.
  2. Step 2: Understand class attribute behavior

    Attributes defined this way are shared by all instances of the class.
  3. Final Answer:

    A value shared by all Car objects -> Option A
  4. Quick Check:

    Class attribute = shared value [OK]
Hint: Class attributes are outside methods, shared by all instances [OK]
Common Mistakes:
  • Thinking class attributes are unique per object
  • Confusing class attributes with instance attributes
  • Assuming class attributes are methods
2. Which of the following is the correct way to define a class attribute color with value "red" inside a class Fruit?
easy
A. class Fruit: def __init__(self): color = "red"
B. class Fruit: def color(self): return "red"
C. class Fruit: def __init__(self, color): self.color = color
D. class Fruit: color = "red"

Solution

  1. Step 1: Identify class attribute syntax

    A class attribute is defined directly inside the class, outside any method.
  2. Step 2: Check each option

    class Fruit: color = "red" correctly defines color as a class attribute. class Fruit: def __init__(self): color = "red" defines a local variable inside __init__. class Fruit: def color(self): return "red" defines a method, not an attribute. class Fruit: def __init__(self, color): self.color = color defines an instance attribute.
  3. Final Answer:

    class Fruit: color = "red" -> Option D
  4. Quick Check:

    Class attribute = direct assignment inside class [OK]
Hint: Class attributes are assigned directly inside class, outside methods [OK]
Common Mistakes:
  • Defining attribute inside __init__ without self
  • Confusing methods with attributes
  • Using self for class attributes
3. What will be the output of this code?
class Dog:
    species = "Canine"

dog1 = Dog()
dog2 = Dog()
Dog.species = "Wolf"
print(dog1.species)
print(dog2.species)
medium
A. Canine\nCanine
B. Wolf\nCanine
C. Wolf\nWolf
D. Canine\nWolf

Solution

  1. Step 1: Understand class attribute change

    The attribute species is a class attribute shared by all instances.
  2. Step 2: Effect of changing class attribute

    Changing Dog.species to "Wolf" updates the value for all instances that don't have their own species attribute.
  3. Final Answer:

    Wolf\nWolf -> Option C
  4. Quick Check:

    Changing class attribute affects all instances [OK]
Hint: Changing class attribute changes it for all instances without override [OK]
Common Mistakes:
  • Thinking instances keep old class attribute values
  • Confusing instance and class attributes
  • Expecting different outputs for dog1 and dog2
4. Find the error in this code snippet:
class Book:
    pages = 100

    def __init__(self, pages):
        pages = pages

b = Book(200)
print(b.pages)
medium
A. The instance attribute pages is not set properly
B. The class attribute pages is overwritten incorrectly
C. Syntax error in __init__ method
D. Cannot print pages attribute directly

Solution

  1. Step 1: Analyze __init__ method

    The line pages = pages assigns the parameter to itself, not to the instance.
  2. Step 2: Understand instance attribute setting

    To set an instance attribute, it should be self.pages = pages. Without self., the instance attribute is not created.
  3. Final Answer:

    The instance attribute pages is not set properly -> Option A
  4. Quick Check:

    Use self.pages to set instance attribute [OK]
Hint: Use self.attribute to set instance attributes inside __init__ [OK]
Common Mistakes:
  • Forgetting self. when assigning instance attributes
  • Assuming parameter assignment sets instance attribute
  • Confusing class and instance attributes
5. You want to keep track of how many objects of class Student are created using a class attribute count. Which code correctly updates count each time a new Student is made?
hard
A. class Student: count = 0 def __init__(self): self.count += 1
B. class Student: count = 0 def __init__(self): Student.count += 1
C. class Student: def __init__(self): count = 0 count += 1
D. class Student: count = 0 def __init__(self): count += 1

Solution

  1. Step 1: Identify class attribute usage

    count is a class attribute, so it should be accessed via the class name inside methods.
  2. Step 2: Check each option for correct increment

    class Student: count = 0 def __init__(self): Student.count += 1 uses Student.count += 1, correctly updating the class attribute. class Student: count = 0 def __init__(self): self.count += 1 tries to increment self.count, which creates an instance attribute instead. Options C and D have syntax or scope errors.
  3. Final Answer:

    class Student: count = 0 def __init__(self): Student.count += 1 -> Option B
  4. Quick Check:

    Update class attribute via ClassName.attribute [OK]
Hint: Use ClassName.attribute to update class attributes inside methods [OK]
Common Mistakes:
  • Using self.attribute to update class attribute
  • Defining count inside __init__ instead of class
  • Forgetting to use class name to access class attribute