When is a class variable initialized in Python?
At the moment the module is imported
test.py
:
def x():
print('x')
class A:
x = x()
then
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
x
It is done at the time of import. These are called static variables and are defined at the class level. These variables are created 1 per class and NOT 1 per object. They are part of loading the class which happens at the time of import.
Following is an example:
classA.py
class A:
print("Printing before Static Variable Creation")
class_var = 1
def __init__(self):
instance_var = 2
main.py
from classA import A
Printing before Static Variable Creation
print('Printing Class Variable Value : ',A.class_var)
Printing Class Variable Value : 1
print(A.__dict__)
{'module': 'classA', 'class_var': 1, 'init': function classA.A.init(self), 'dict': attribute 'dict' of 'A' objects, 'weakref': attribute 'weakref' of 'A' objects, 'doc': None}
The code inside a class runs when the class
statement is encountered - ie. during the import itself.
This is because, unlike in Java or C# class definitions, Python class
statements are actually executable code.
class A:
print("I'm running!") # yup, code outside a method or field assignment!
b = print("Me too!")
print("Wait for me!")
The result is neatly in order of execution:
I'm running!
Me too!
Wait for me!