Liste

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
Mupx
User
Beiträge: 5
Registriert: Montag 19. April 2021, 15:54

Hallo, ich habe gleich 2 Fragen.
1. ich habe folgendes Programm geschrieben und wundere mich, warum in der Liste 2 mal 43 ausgegeben wird.

class myclass():
zahl = 42
zeichen = "buchstabe"
liste = []
def __init__(self, buchstabe= "das ist das erste"):
self.buchstabeneu = buchstabe
self.liste.append(43)


def hallo(self, neuezahl):
self.zahl = neuezahl
self.liste.append(2)

instanz = myclass("hallo")
instanz2 = myclass("das zweite")
instanz.hallo(814)
print(instanz.liste)

2. Frage.
Ich sehe viele Leute die Code schreiben der so etwas enthält wie " from <irgendwas> import <irgendwas> und wollte nur mal fragen, ob man mit der Zeit reinkommt und dann weiß was man importieren muss um etwas zu machen oder gibt es so eine Liste von wegen "importiere das und dann kannst du das machen" und bei zum Beispiel import time gibt es ja gefühlt unendlich viele Dinge die man hinterherschreiben kann z.B time.sleep().
Muss man das alles auswendig lernen oder kommt das einfach mit der Zeit weil man das immer wieder braucht?

Vielen Dank für eure Hilfe schon mal im Voraus :D
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Klassenattribute sind wie globale Variablen. Wenn man sie verändert, gibt es unerwartete Effekte, deshalb benutzt man sie nicht. Alle Attribute werden in __init__ erstellt.

Klassen schreibt man mit großem Anfangsbuchstaben.
`zeichen` und `buchstabe` enthalten kein Zeichen oder einen Buchstaben, sondern Texte. Wenn also der Name einer Variable nicht mit dem Inhalt übereinstimmt, ist das sehr verwirrend.

Code: Alles auswählen

class Beispiel():
    def __init__(self, text):
        self.zahl = 42
        self.liste = [43]
        self.text = text


    def hallo(self, neue_zahl):
        self.zahl = neue_zahl
        self.liste.append(2)

instanz = Beispiel("hallo")
instanz2 = Beispiel("das zweite")
instanz.hallo(814)
print(instanz.liste)
Um zu wissen, welche Module es gibt und welche Funktionen darin sind, muß man die Dokumentation dazu lesen. Ein guter Einstieg ist die Dokumentation auf docs.python.org
Und da gilt das selbe für alles Wissen: entweder liest man etwas nach, oder fragt jemanden, der sich damit auskennt und wenn man etwas mehrmals braucht, weiß man irgendwann selbst, wo man was findet.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Mupx,

1. liste ist ein Klassen-Attribut. Jede Instanz der Klasse hat darauf Zugriff. Es ist das selbe für jede Instanz. buchstabeneu ist ein Instanz-Attribut und jede Instanz der Klasse verwaltet eine eigene Kopie davon.
Das hängt damit zusammen, wie du diese Namen in der Klasse definierst.
self.buchstabeneu ist an self, also eine Referenz auf die Instanz, gebunden.
liste ist direkt in der Klassendefinition angelegt.
2. Python ist modular aufgebaut. Durch import können weitere Module hinzugefügt werden, wenn man sie braucht. Mit der Zeit kann man sich die wichtigsten merken. Es gibt solche, die schon in Python integriert sind und solche die nachinstalliert werden müssen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ergänzend zur Antwort Sirius3: Konstanten sind als Klassenattribute okay. Dafür kann man die problemlos verwenden. Also wenn `zahl` beispielsweise eine wäre, dann könnte man folgendes schreiben — mit einem besseren Namen und per Konvention komplett in Grossbuchstaben, weil Konstante:

Code: Alles auswählen

class Universe:
    ANSWER = 42
    ...
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten