Skip to main content

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

TypeDefinedAccessedUse for
Class variableInside class bodyClass.attr or instance.attrDefaults, configuration, counters
Instance variableInside methods (self.attr)instance.attrPer-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

Next up in your learning path