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 'canine' >>> e.kind # shared by all dogs 'canine' >>> d.name # unique to d 'Fido' >>> e.name # unique to e 'Buddy'
self refers to the specific object/instance we are calling. yes?
Yes, the word self references the object of the class.
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.