Oto próbka tego, co próbuję zrobić

class A:
      def xyz(self):
        return n      # Where n is an arbitrary object from a module

class B:
    def abc(self, x): # Where x is an object of class A
      x = x.xyz()     # Where xyz is a method of class A          


if list1[n].abc(list2[k]):  # Where n and k are counters in a loop
  pass

Błąd, który ciągle napotykam, to TypeError: 'type' object is not subscriptable i pojawia się w wierszu if list1[n].abc(list2[k]): Co oznacza ten błąd i jak mogę go naprawić?

-1
Zafirmk 20 listopad 2019, 22:48
1
Nie pokazałeś, jak generowane są list1 i list2. Błąd sugeruje, że jeden (lub oba) nie są w rzeczywistości listami.
 – 
Paul M.
20 listopad 2019, 22:51
1
Nie można na to odpowiedzieć, ponieważ nie zdefiniowałeś listy1 i listy2.
 – 
Daniel Roseman
20 listopad 2019, 22:51

1 odpowiedź

Aby zrozumieć swoje pytanie, musisz zrozumieć dwie rzeczy

1) Co to jest obiekt typu

Obiekt typu to obiekt używany do opisu innego obiektu. Typ [1,2,3] to lista (powiedzmy, że przechowujemy typ [1,2,3] w zmiennej k), typ tej zmiennej k jest typem. Zobaczmy przykład tego w kodzie

a = list()
type(a)
<class 'list'>
#As we can see above, the type of a list is 'list'

k = type(a)
type(k)
<class 'type'>
#The type of this list type, is 'type'

2) Co to znaczy być indeksowalnym

Aby obiekt był indeksowany, musi implementować metodę dunder __getitem__(). Element jest indeksowany, jeśli można uzyskać dostęp do elementu w tym obiekcie poprzez indeks (your_object[1]). Przykładami obiektów z indeksem dolnym są krotki, listy, string, dict

A teraz odpowiadając na twoje pytanie, powodem występowania tego błędu jest to, że lista1 jest obiektem typu, a obiekty typu nie implementują metody __getitem__(), więc nie możesz wykonać operacji list1 [n]

1
vi_ral 20 listopad 2019, 23:02