Ich lerne weiter Python. Bin jetzt bei Klassen.
Es scheint so zu sein, dass alle Attribute immer public sind, also erst mal ähnlich wie ein struct in C++.
Die fehlende Typprüfung wirkt hier auf mich besonders irritierend, weil ich einfach eine Funktion, die eine Klasseninstanz als Parameter nimmt, ohne Typangabe definieren kann, wenn ich dann im Programm irgend was anderes in die Funktion reinstecke, gibt's einen Fehler zur Laufzeit.

Aber wie ich Python kenne, kann man das sicher zus. einbauen.

Jetzt Klassenmethoden: Gut, nun weiß ich, dass da immer self stehen muss, das war mir beim Lesen von Python Code immer völlig unverständlich, was das ewige self soll.
Widerspricht aber irgendwie dem Geiste von Python, dass alles immer möglichst einfach sein soll - wenn da sowieso immer self steht, könnte man es ja auch weglassen.
Logisch wäre es, wenn es sowas wie statische Methoden gibt, die bräuchte kdann kein Self (weil dann keine Instanz der Klasse nötig wäre), vielleicht kommt das ja noch.

Und tatsächlich:
class MeinRechner:
@staticmethod
def addiere(a, b):
# Keine Referenz auf self oder cls
return a + b

# Aufruf ohne Instanziierung
ergebnis = MeinRechner.addiere(5, 3)
print(ergebnis) # Ausgabe: 8

Nur - wenn da kein self steht, muss es ja eine statische Methode sein, warum muss man dann @staticmethod dazuschreiben? Ist doch dann auch redundant.

Jetzt die "magic methods", die in doppelte Unterstriche eingerahmt sind: Hier merke ich mir mal, dass man damit Konstruktoren realisiert (__init__), operatoren überladen kann (was in Java ja nicht geht, aber etwa in C++, hat mich in Java immer gestört) und sonstiges Standardverhalten implementieren kann (Umwandlung in string etwa).