Instance vs Class Variables
OOP Core
Instance vs Class Variables
Python classes hold both shared and per-instance state. Know where your data lives to avoid cross-instance side effects.
Comparison
| Type | Defined | Accessed | Use for |
|---|---|---|---|
| Class variable | Inside class body | Class.attr or instance.attr | Defaults, configuration, counters |
| Instance variable | Inside methods (self.attr) | instance.attr | Per-object state |
class Cart:
tax_rate = 0.07 # class variable
def __init__(self):
self.items = [] # instance variable
Mutable class attributes
Mutable objects at class level are shared across all instances:
class Problem:
values = [] # shared across all instances
p1 = Problem()
p2 = Problem()
p1.values.append(1)
print(p2.values) # [1] — p2 sees p1's change!
Fix by initializing in __init__:
class Fixed:
def __init__(self):
self.values = [] # each instance gets its own list