AttributeError: попытка доступа к атрибуту объекта в 2D-списке в python - PullRequest
0 голосов
/ 25 мая 2020

У меня проблемы с доступом к объектам внутри моего 2D-списка в Python. В основном то, что я делаю, - это то, что у меня есть 2D-список с именем recueil (по-французски - коллекция), в котором хранятся Reflection объектов. Класс Reflection имеет атрибут valeur (= значение) и indice (= индекс), где значение - это то, что я получаю, когда применяю функцию ref (в настоящее время она не настроена) к отражению с более низким индексом (первая строка Reflections имеет один индекс, а n-я строка Reflections имеет n индексов, что объясняет indice[]).

def main():
    a = [1, 3, 5]
    b = [2, 4, 6]
    n = 3

    recueil = [[Reflection([None],0) for colonne in range(N(ligne))] for ligne in range(n)]

    recueil[0][0].valeur = b[0] - a[0]
    recueil[0][1].valeur = b[1] - a[1]
    recueil[0][2].valeur = b[2] - a[2]

    for i in range(n):
        print(recueil[0][i].valeur)
        print(recueil[0][i].indice)

    init_indices(recueil, n)
    remplir_indices(recueil, n)


def N(n):
    return 3 * (2 ** n)

def init_indices(recueil,n):
    for i in range(n):
        for j in range(N(i)):
            recueil[i][j] = [0] * (i+1)

class Reflection(object):
    indice = [0]
    valeur = 0
    def __init__(self, indice, valeur):
        self.indice = indice
        self.valeur = valeur

Проблема, с которой я столкнулся, заключается в том, что в remplir_indices (= fill_indexes) я пытаюсь сделать так, чтобы начальные наборы имели индексы от 1 до n (поэтому recueil[0][0].indice = 1, ..., recueil[0][n-1].indice = n), но он обрабатывает recueil[][] как список, а не как объект, хранящийся в нем. Есть идеи относительно моей ошибки?

def remplir_indices(recueil, n):
    for i in range(n):
        if i == 0:
            for j in range(n):
                recueil[i][j].indice[0] = j
    else:
        return 0

1 Ответ

1 голос
/ 25 мая 2020

Это похоже на проблему с отступом:

def remplir_indices(recueil, n):
    for i in range(n):
        if i == 0:
            for j in range(n):
                recueil[i][j].index[0] = j
                # recueil[i][j].indice[0] = j
        return 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...