Klassenvariablen sind globaler Zustand, darum ist das nicht gut da tatsächlich Variablen zu haben, aber es kann Sinn machen Konstanten zu definieren die an Klassen gebunden sind. Also der Umstand das man auf dieser Ebene Namen definieren kann, ist nicht nutzlos.
Und mit Metaklassen oder Klassendekoratoren kann es auch Sinn machen Informationen auf Klassenebene zu definieren, die dann verwendet werden können um die Klasse konkreter zu beschreiben und beim erstellen der Klasse ausgewertet zu werden. Ein Beispiel dafür — `dataclasses` — haben wir hier ja gerade gesehen. Ein anderes Beispiel in der Standardbibliothek wäre das `ctypes`-Modul aus der Standardbibliothek.
kleine Mathe-Spielereien
- __blackjack__
- User
- Beiträge: 14020
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Welche Analogie soll das sein? Du hast eine Wall-Klasse und machst "ungesunde" Dinge mit dessen Klassenattribut. Geht es dir darum, dass es polymorph wäre, weil sich die Veränderung auf alle erzeugten Objekte der Klasse auswirkt? Dann hast du das Thema offensichtlich nach wie vor nicht verstanden.
Vielleicht würde es dir helfen, die Sache mit Java anzugehen. Denn da muss man den Typ explizit hinschreiben. Seit Java 10 gibt es zwar "var" (also doch schon einige Jahre), wodurch der Zwang zur Typangabe wegfallen kann, aber das muss man ja nicht unbedingt verwenden.
Bei einer schnellen Suche nach "java polymorphism example" fand ich jedenfalls diese Beschreibung am besten, weil dort mit der Elternklasse deklariert, aber mit der Kindklasse initialisiert wird. Das fehlte mir bei einigen anderen Beispielen. Die Frage ist aber ehrlich gesagt auch, ob du dieses Thema nicht vielleicht nach hinten schieben solltest.
Also das OOP-Beispiel an gleicher Stelle, nur neben an im Python-Bereich erscheint mir auch ganz nett..
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
In der Praxis arbeiten wir natürlich nicht mit Hunden und Katzen. Neben dem Beispiel mit der Länge und der Addition fällt mir noch ein weiterer typischer Anwendungsfall für Python ein, den ich selber oft für meine Funktionen verwende: Iterable.
Da wird also ein Container mit Elementen erwartet, damit mit diesen Elementen etwas gemacht werden kann. Es muss aber nicht zwingend eine Liste oder sonstiger konkreter Typ sein, sondern einfach etwas, das ich mit einer for-Schleife benutzen kann.
Daher geht man hier vom abstrakten Typen aus:
Dies funktioniert mit jeder Klasse, die das Iterator-Protokoll implementiert, analog zu den bei Java bekannten Schnittstellen, die ja auch in meinem Link erwähnt wurden. Damit bekommt man Polymorphismus in Python, möglicherweise ohne dass es einem bisher bewusst war. 
Da wird also ein Container mit Elementen erwartet, damit mit diesen Elementen etwas gemacht werden kann. Es muss aber nicht zwingend eine Liste oder sonstiger konkreter Typ sein, sondern einfach etwas, das ich mit einer for-Schleife benutzen kann.
Daher geht man hier vom abstrakten Typen aus:
Code: Alles auswählen
def handle_items(iterable):
for item in iterable:
# ...

7.7.25
'Hier steh' ich nun ich armer Tor.....'
und frage, " welchen Polymorphismus" soll ich nun auswählen,
um es jemals verstehen zu können?
Ich verfüge nicht über metaphorische Fähigkeiten.
Hier wäre die Auswahl;
OSWALD
Arten von Polymorphismus
In der Computerprogrammierung gibt es zwei Hauptarten von Polymorphismus:
Polymorphismus zur Kompilierzeit.
Der auch als statischer Polymorphismus bekannte Polymorphismus zur Kompilierzeit
ist in OOP-Sprachen wie Java weit verbreitet.
Sie verwendet die Methodenüberladung, um mehrere Methoden zu erstellen,
die in derselben Klasse denselben Namen,
aber eine unterschiedliche Anzahl von Parametern haben.
Sie können auch Parameter für unterschiedliche Datentypen haben.
Polymorphismus zur Laufzeit.
Nix für ungut
OSWALD
##############################
Der Laufzeit-Polymorphismus, der auch als dynamischer Polymorphismus bezeichnet wird,
verwendet Methodenüberladung, damit eine untergeordnete Klasse ihre eigene Definition
einer Methode der übergeordneten Klasse hat.
Diese Art der Polymorphie wird oft mit Upcasting in Verbindung gebracht,
wenn eine Elternklasse auf eine Instanz der Kindklasse verweist.
Polymorphismus kann in der OOP auch auf andere Weise implementiert werden, zum Beispiel:
Ad-hoc-Polymorphismus.
Eine Funktion wird auf verschiedene Argumente angewandt und kann je nach Art des Arguments unterschiedlich funktionieren.
Parametrischer Polymorphismus.
Programmierer können generische Funktionen schreiben, die Werte in einem Datensatz unabhängig von ihrem Typ auf die gleiche Weise behandeln.
Subtyping-Polymorphismus.
Programmierer können mehrere Funktionen oder Unterprogramme erstellen, die auf der Supertyp-Klasse und auf verschiedenen Subtypen arbeiten können.
Zeilen-Polymorphismus.
Programmierer können Programme schreiben,
die sich nur auf einen bestimmten Abschnitt eines Datenbankdatensatzes,
das heißt eine Zeile, auswirken.
#################################
'Hier steh' ich nun ich armer Tor.....'
und frage, " welchen Polymorphismus" soll ich nun auswählen,
um es jemals verstehen zu können?
Ich verfüge nicht über metaphorische Fähigkeiten.
Hier wäre die Auswahl;
OSWALD
Arten von Polymorphismus
In der Computerprogrammierung gibt es zwei Hauptarten von Polymorphismus:
Polymorphismus zur Kompilierzeit.
Der auch als statischer Polymorphismus bekannte Polymorphismus zur Kompilierzeit
ist in OOP-Sprachen wie Java weit verbreitet.
Sie verwendet die Methodenüberladung, um mehrere Methoden zu erstellen,
die in derselben Klasse denselben Namen,
aber eine unterschiedliche Anzahl von Parametern haben.
Sie können auch Parameter für unterschiedliche Datentypen haben.
Polymorphismus zur Laufzeit.
Nix für ungut
OSWALD
##############################
Der Laufzeit-Polymorphismus, der auch als dynamischer Polymorphismus bezeichnet wird,
verwendet Methodenüberladung, damit eine untergeordnete Klasse ihre eigene Definition
einer Methode der übergeordneten Klasse hat.
Diese Art der Polymorphie wird oft mit Upcasting in Verbindung gebracht,
wenn eine Elternklasse auf eine Instanz der Kindklasse verweist.
Polymorphismus kann in der OOP auch auf andere Weise implementiert werden, zum Beispiel:
Ad-hoc-Polymorphismus.
Eine Funktion wird auf verschiedene Argumente angewandt und kann je nach Art des Arguments unterschiedlich funktionieren.
Parametrischer Polymorphismus.
Programmierer können generische Funktionen schreiben, die Werte in einem Datensatz unabhängig von ihrem Typ auf die gleiche Weise behandeln.
Subtyping-Polymorphismus.
Programmierer können mehrere Funktionen oder Unterprogramme erstellen, die auf der Supertyp-Klasse und auf verschiedenen Subtypen arbeiten können.
Zeilen-Polymorphismus.
Programmierer können Programme schreiben,
die sich nur auf einen bestimmten Abschnitt eines Datenbankdatensatzes,
das heißt eine Zeile, auswirken.
#################################
Uns sieh dir mal erst Kreise an. Die treten auch in total unterschiedlichen Formen auf. Zum Beispiel am Fahrrad oder als Alternative zu einer Kreuzung oder als Schallplatte. Und manchmal dreht man sich auch einfach im Kreis. Total verrückt, oder? Was ist denn nun der richtige Kreis?
Vielleicht beantwortet es dieser Song, vielleicht aber auch nicht:
https://www.youtube.com/watch?v=apCal7ihvy0
Vielleicht beantwortet es dieser Song, vielleicht aber auch nicht:
https://www.youtube.com/watch?v=apCal7ihvy0