SyntaxStudy
Sign Up
Python Class vs Instance Variables
Python Intermediate 9 min read

Class vs Instance Variables

Class vs Instance Variables

Instance variables belong to individual objects. Class variables are shared across all instances of the class.

Instance Variables

class Player:
    def __init__(self, name, level=1):
        self.name  = name   # unique per player
        self.level = level
        self.xp    = 0      # starts at 0 for everyone

Class Variables

class Player:
    max_level  = 100        # shared by ALL players
    xp_per_level = 1000
    _count = 0              # private class variable

    def __init__(self, name):
        self.name  = name
        Player._count += 1

    @classmethod
    def get_count(cls):
        return cls._count

p1 = Player("Alice")
p2 = Player("Bob")
print(Player.get_count())  # 2
print(Player.max_level)    # 100

Shadowing Class Variables

class Config:
    debug = False

c1 = Config()
c2 = Config()
c1.debug = True   # creates an INSTANCE variable on c1 only
print(c1.debug)   # True
print(c2.debug)   # False (still reads class variable)
print(Config.debug)  # False
Example
class BankAccount:
    interest_rate = 0.03   # class variable — same for all

    def __init__(self, owner, balance=0):
        self.owner = owner      # instance variable
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def add_interest(self):
        self.balance += self.balance * BankAccount.interest_rate

acc = BankAccount("Alice", 1000)
acc.deposit(500)
acc.add_interest()
print(f"{acc.owner}: ${acc.balance:.2f}")
Pro Tip

Be careful with mutable class variables (lists, dicts) — all instances share the same object. Mutating it in one instance affects all others.