Члены класса инициализируются только один раз - они инициализируются до создания (и без) экземпляров.
Вы можете проверить это самостоятельно:
def calculate_a():
print("Calculated")
return 5
class A:
a = calculate_a()
Выполнение этой печати 'Calculated'
один раз, даже без создания экземпляров.
def calculate_a():
print("Calculated")
return 5
class A:
a = calculate_a()
input("Order?")
k = A()
i = A()
c = A()
Выполнение 'Calculated'
этого отпечатка только один раз - и он делает это прямо перед запросом 'Order?'
- после ввода программа заканчивается без каких-либо дополнительных выходных данных.
Больше информации:
Вы можете поместить свой метод "init" в класс-держатель, чтобы избежать загрязнения global ():
class A_base:
@staticmethod
def calculate_a():
print("Calculated")
return 5
class A:
a = A_base.calculate_a()