Call list in Method in Class

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lonsdejlit
User
Beiträge: 6
Registriert: Donnerstag 23. September 2021, 21:20

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.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

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())
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
lonsdejlit
User
Beiträge: 6
Registriert: Donnerstag 23. September 2021, 21:20

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?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

OO steht für Objekt Orientierung. Und ich würde das offizielle Python Tutorial durcharbeiten.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

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
"When I got the music, I got a place to go" [Rancid, 1993]
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

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