Изменить значение всех элементов в списке сумм через класс / функцию - PullRequest
0 голосов
/ 04 марта 2020

Мы пишем программу на python3, где мы хотим добавить значения в три списка, используя класс:

trusted_reference, trusted_initialize, trusted_sum_list = ([] for i in range(3))

class trust():

    def __init__(self, bool, sum):
        self.bool = bool
        self.sum = sum

    def initialize(self):
        trusted_initialize.append(self.bool)
        trusted_sum_list.append(self.sum) #ELEMENTS CAN CHANGE

    def reference(self):
        trusted_reference.append(self.bool)
        trusted_sum_list.append(self.sum) #ELEMENTS CAN CHANGE

Сначала мы добавляем значения, говоря следующее:

for i in range(3)
    trusted_sum_new = trusted_sum + 0.1
    initialize = trust(1, trusted_sum_new)
    initialize.initialize()

При вызове вышеуказанных строк кода наши списки выглядят так:

trusted_initialize = {1, 1, 1}
trusted_reference = {}
trusted_sum_list = {0.1, 0.1, 0.1}

Затем мы запускаем следующие строки кода ПОСЛЕ ИНИЦИАЛИЗАЦИИ:

for i in range(3)
    trusted_sum_new = trusted_sum + 0.1
    reference = trust(1, trusted_sum_new)
    reference.reference()

и затем хочу увидеть что-то вроде этого:

trusted_initialize = {1, 1, 1}
trusted_reference = {1, 1, 1}
trusted_sum_list = {0.2, 0.2, 0.2}

и НЕ:

trusted_initialize = {1, 1, 1}
trusted_reference = {1, 1, 1}
trusted_sum_list = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}

1 Ответ

1 голос
/ 04 марта 2020

С помощью

for i in range(3)
    trusted_sum_new = trusted_sum + 0.1
    initialize = trust(1, trusted_sum_new)
    initialize.initialize()

вы создаете 3 объекта «доверия», но не сохраняете ссылки на объекты.

С

for i in range(3)
    trusted_sum_new = trusted_sum + 0.1
    reference = trust(1, trusted_sum_new)
    reference.reference()

вы создайте 3 новых объекта доверия, и вы вызываете reference () для каждого объекта. Это только вызовы append для массивов. Объекты ничего не знают о предыдущих значениях в массивах.

Я думаю, что было бы лучше, если бы массив объектов был:

class trust():

    def __init__(self, initialize, sum):

        self.initialize = initialize
        self.trusted_sum = sum
        self.trusted_reference = False

    def reference(self, reference, sum_new):
        self.trusted_reference = reference
        self.trusted_sum = sum_new

# ===================================================================

trusted_sum = 0
trusted_list = []

# create the objects -------------------------
for i in range(3):
    trusted_sum_new = trusted_sum + 0.1
    trusted_list.append(trust(1, trusted_sum_new))

for i in range(3):
    print(trusted_list[i].initialize, trusted_list[i].trusted_sum, 
    trusted_list[i].trusted_reference)

# change values of the objects -------------------------
for i in range(3):
    trusted_sum_new = trusted_list[i].trusted_sum + 0.1
    trusted_list[i].reference(True, trusted_sum_new)

for i in range(3):
    print(trusted_list[i].initialize, trusted_list[i].trusted_sum, 
    trusted_list[i].trusted_reference)

Результат

1 0.1 False
1 0.1 False
1 0.1 False
1 0.2 True
1 0.2 True
1 0.2 True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...