Seite 1 von 1
Call list in Method in Class
Verfasst: Donnerstag 23. September 2021, 21:27
von lonsdejlit
Hi,
ich möchte auf eine Liste "res" zugreifen, die in einer Methode "Comp" einer Klasse "calc" erstellt wurde, aber ich kann nicht...
Code: Alles auswählen
class Comp:
model = ["alfa","beta","gamma","delta"]
rank = ["a","b","c","d","e","f","g","h"]
value = [1,2,3,4,5,6,7,8]
def __init__(self,model,rank,value):
self.model = model
self.rank = rank
self.value = value
def calc(self):
res = []
for i in range(len(rank)):
res.append((rank[i],value[i]))
return res
obj = Comp.calc()
print(obj)
Wenn ich versuche, die Ergebnisse der Methode card (d. h. die Liste, auf die ich zuzugreifen versuche) einem Objekt zuzuweisen und das Objekt zu drucken, erhalte ich eine Fehlermeldung: TypeError: calc() missing 1 required positional argument: 'self'.
Ich werde dankbar die Eure unterstuetzung.
Re: Call list in Method in Class
Verfasst: Donnerstag 23. September 2021, 21:36
von __deets__
Du musst mal ein Grundlagen-Tutorial zur OO durcharbeiten. Da geht noch eine Menge schief. Die Klasse wird nicht instantiiert, Argumente für den Konstruktor fehlen, self beim Zugriff auf Rank und value fehlen.
Re: Call list in Method in Class
Verfasst: Donnerstag 23. September 2021, 21:54
von JakobPrie
dein Aufruf würde nur klappen, wenn die Methode static wäre, was aber nicht zu OO passt, also genau das was __deets__ sagt.
Hier dein Beispiel mal fix mit OO
Code: Alles auswählen
class Comp:
def __init__(self, model, rank, value):
self.model = model
self.rank = rank
self.value = value
def calc(self):
res = []
for i in range(len(self.rank)):
res.append((self.rank[i], self.value[i]))
return res
if __name__ == "__main__":
model = ["alfa", "beta", "gamma", "delta"]
rank = ["a", "b", "c", "d", "e", "f", "g", "h"]
value = [1, 2, 3, 4, 5, 6, 7, 8]
obj = Comp(model, rank, value)
print(obj.calc())
Re: Call list in Method in Class
Verfasst: Donnerstag 23. September 2021, 22:16
von Sirius3
Man iteriert nicht über einen Index, so dass aus calc das hier wird:
Code: Alles auswählen
def calc(self):
return list(zip(self.rank, self.value))
Wobei sich dann gleich die Frage anschließt, warum rank und value zwei Listen statt einer sind.
Re: Call list in Method in Class
Verfasst: Freitag 24. September 2021, 07:32
von lonsdejlit
Maenner,
danke fuer Eure Beitrag!
@ __deets__ danke fuer den Hinweis. Koentest Du mir bitte sagen, was OO bedeutet?
@ JakobPrie danke fuer die Muehe und die Loesung!!! Ich verstehe nicht warum die Variable ausser der Klasse sind, aber ich hoffe, dass es klaar wird, nachdem ich mich mit OO kennenlerne
@Sirius3 danke fuer den shortcut!
Habt ihr eine gute Informationsquelle bezueglich OO?
Re: Call list in Method in Class
Verfasst: Freitag 24. September 2021, 08:00
von __deets__
OO steht für Objekt Orientierung. Und ich würde das offizielle Python Tutorial durcharbeiten.
Re: Call list in Method in Class
Verfasst: Freitag 24. September 2021, 08:05
von Dennis89
Hallo,
"OO" heißt Objektorientiert und ein gutes Tutorial dazu findest du auf der offiziellen Python Seite:
https://docs.python.org/3.9/tutorial/index.html
Da gibts ein Thema "Classes", es empfiehlt sich aber, mal alles durchzuarbeiten.
Grüße
Dennis
Edit: Wie kann ich bitte 5 Minuten für den Text gebraucht haben ?

Re: Call list in Method in Class
Verfasst: Montag 27. September 2021, 19:59
von JakobPrie
@lonsdejlit Die Variablen, die ich in der if deklariert habe, sind außerhalb der Klasse, da sie nichts mit der Klasse so gesehen zu tun haben. man erstellt sie und übergibt sie an die Klasse (genauer an die __init__). Folgende Varianten wären auch möglich, vlt wird es dadurch verständlicher:
Code: Alles auswählen
variable_eins = ["alfa", "beta", "gamma", "delta"]
variable_zwei = ["a", "b", "c", "d", "e", "f", "g", "h"]
variable_drei = [1, 2, 3, 4, 5, 6, 7, 8]
obj = Comp(variable_eins, variable_zwei, variable_drei)
oder
Code: Alles auswählen
obj = Comp(["alfa", "beta", "gamma", "delta"], ["a", "b", "c", "d", "e", "f", "g", "h"], [1, 2, 3, 4, 5, 6, 7, 8])