What is the difference between a class variable and instance variable?

Hello! I am curious about something. In a previous lesson we learned to create a variable and then we can call it later with the object.variable syntax. Here it seems that you can skip the creating a variable step and simply put the object.variable = value syntax which does both of the previous steps in one. Am I correct in my observations?

2 Likes

I had the same question until I realised I confuse a “class variable” with an “instance variable”. They are not the same thing:
CLASS VARIABLES:
A class variable needs the "creating a variable step " as you call it, in the intended block of the Class. If it is called later by any object using the syntax object.variable, it will yield the same data for every instance/object of the class.
INSTANCE VARIABLES:
Although an instance variable uses the same attribute notation used for accessing class variables (object.variable ) it does so in order to assign data to the object. The data now is not shared by all instances of the class, they re specific to the object they are attached to.

49 Likes

nice explanation. Similar to Java, although in Python one must not define the instance variable inside the class

Crystal clear explanation for the difference. Thank you!

There is a good one example:

class Dog:

    kind = 'canine'         # class variable shared by all instances

    def __init__(self, name):
        self.name = name    # instance variable unique to each instance

>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind                  # shared by all dogs
'canine'
>>> e.kind                  # shared by all dogs
'canine'
>>> d.name                  # unique to d
'Fido'
>>> e.name                  # unique to e
'Buddy'
8 Likes

self refers to the specific object/instance we are calling. yes?

1 Like

Yes, the word self references the object of the class.

1 Like
class Store:
  pass

alternative_rocks = Store()
isabelles_ices = Store()

#Instance Variables for each 
alternative_rocks.store_name = "Alternative Rocks"
isabelles_ices.store_name = "Isabelle's Ices"

This is the code that I have from this exercise. Can’t we define the instance variable, store_name, inside the class? And then when instantiating each object, we just pass in the value or name of the store.

So I have a question, So this instance variable is indepedent to class variable right? Are they not belong to class at all?

pobarachunk posted a very good example:

class Dog:

    kind = 'canine'         # class variable shared by all instances

    def __init__(self, name):
        self.name = name    # instance variable unique to each instance
        
d = Dog('Fido')
e = Dog('Buddy')

print(d.kind)
print(e.kind)

print(d.name)
print(e.name)

we could extend this even further:

Dog.kind = 'Sheppard'
d.name = 'Nico'

print(d.kind)
print(e.kind)

print(d.name)
print(e.name)

based on this code, I hope you reach the following conclusions:

a class variable is shared by all instances
an instance variable is not shared, but instead “unique” per instance.