Skip to content Skip to sidebar Skip to footer

Python Class Variables Or Class Variables In General

From Dive into Python: Class attributes are available both through direct reference to the class and through any instance of the class. Class attributes can be used as class-lev

Solution 1:

Because ints are immutable in python

v.counter += 1

rebinds v.counter to a new int object. The rebinding creates an instance attribute that masks the class attribute

You can see this happening if you look at the id() of v.counter

>>>id(v.counter)
149265780
>>>v.counter+=1>>>id(v.counter)
149265768

Here you can see that v now has a new attribute in its __dict__

>>>v=c()>>>v.__dict__
{}
>>>v.counter+=1>>>v.__dict__
{'counter': 1}

Contrast the case where counter is mutable, eg a list

>>>classc:... counter=[]...>>>v=c()>>>v.counter+=[1]>>>c.counter
[1]
>>>

Solution 2:

Before:

c.counter = 0
v.counter -> c.counter

During:

c.counter = 0v.counter = c.counter + 1

After:

c.counter = 0v.counter = 1

Solution 3:

Note that you can still get at the class value:

v.__class__.__dict__['counter']

will allow you to read or set to your class, even if you have obscured the symbol by adding a symbol to your instance's __dict__.

Solution 4:

Your are confused between declaration and instantiation.

C is the name of a class you declared.

v is an object, instantiated from c.

Post a Comment for "Python Class Variables Or Class Variables In General"