как разделить вычисляемую переменную между всеми экземплярами метода - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу вычислить значение в классе, которое остается одинаковым для всех экземпляров этого класса и вычисляется только один раз

class A:
    a = calculate_a()
    def calculate_a():
        return 5

в первую очередь, Что я должен установить в качестве ссылки для calculate_a() в a = calculate_a()?self.calculate_a() и A.calculate_a() оба неверны (неразрешенная ссылка). Мне нужно, чтобы при создании второго экземпляра calculate_a() больше не вызывался.

instance1 = A()  -> calls calculate_a() to set value for a;
instance2 = A()  -> uses the value of a calculated above without calling calculate_a

1 Ответ

0 голосов
/ 14 декабря 2018

Члены класса инициализируются только один раз - они инициализируются до создания (и без) экземпляров.


Вы можете проверить это самостоятельно:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...