ich wollte die Frage(n) eigentlich nicht stellen, aber ich stoße immer wieder darauf und habe eigentlich keine Ahnung, worum es da geht.
Es geht um Metaklassen und spezielle Attribute.
Sachen wie:
- die "Main-Funktion"
Code: Alles auswählen
if __name__ == '__main__':
main()
Code: Alles auswählen
class Foo():
def __init__(self):
Spätestens bei solchen Zeilen habe ich dann erst recht keine Ahnung mehr, was eigentlich abgeht:
Code: Alles auswählen
def __str__(self):
return self.__class__.__name__
Auf meiner Expedition bin ich schließlich auf "Metaklassen" (metaclasses) gestoßen, was mich nur noch mehr verwirrt hat. (Bsp.: die type-Metaklasse)
Dieser Artikel ist eigentlich ganz gut:
https://realpython.com/python-metaclasses/
Dennoch sind bei mir noch viele Fragezeichen im Kopf.
1. Frage:
Was sind diese speziellen Attribute:
https://docs.python.org/3/library/stdty ... .__class__
Viele benutzen sie offenbar oft. Was kann ich mit denen anstellen? Ich nutze sie, ohne zu wissen, was sie überhaupt machen.
2. Frage:
Metaklassen ... what?!
Es heißt im o.g. Artikel:
Wie wahrscheinlich ist es, dass ich eine Klasse jemals so erstelle?You can also call type() with three arguments—type(<name>, <bases>, <dct>):
<name> specifies the class name. This becomes the __name__ attribute of the class.
<bases> specifies a tuple of the base classes from which the class inherits. This becomes the __bases__ attribute of the class.
<dct> specifies a namespace dictionary containing definitions for the class body. This becomes the __dict__ attribute of the class.
Was sind diese Attribute __name__ (ok, das ist relativ einleuchtend), __bases__ und __dict__?
Es heißt in dem Artikel auch, dass viele Programmierer nie wirklich etwas damit zu tun haben. Stimmt das? Ist es Zeitverschwendung sich damit auseinanderzusetzen?
Kennt jemand ein gutes Buch, eine YouTube-Video-Reihe, einen Udemy-Kurs oder sonst irgendetwas zu diesen Themen?
Über hilfreiche Antworten würde ich mich sehr freuen.

Weitere (unwichtigere) Frage:
Außerdem habe ich in einem anderen Forenbeitrag gelesen, dass man nicht via
Code: Alles auswählen
for i in range(len(x)):
https://docs.quantifiedcode.com/python-anti-patterns/
Super cool, da werde ich noch ein bisschen stöbern.
Aber zur Frage: Wieso macht man das nicht so? Ich weiß, dass ich das auch öfter so gemacht habe. Was wäre denn der richtige Weg?
Zum Iterieren über Dicts, habe ich das gefunden:
https://docs.quantifiedcode.com/python- ... onary.html
Liebe Grüße,
Marc