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?


I had the same question until I realised I confuse a “class variable” with an “instance variable”. They are not the same thing:
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.
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.


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
>>> e.kind                  # shared by all dogs
>>> d.name                  # unique to d
>>> e.name                  # unique to e

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

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