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
Liste
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.
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.
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)
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.
@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.
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.
- __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