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 ? :o

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])