Metaklassen und spezielle Attribute
Verfasst: Donnerstag 24. Oktober 2019, 13:58
Hallo zusammen,
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"
- Konstruktor
habe ich einfach immer hingenommen; nach dem Motto: "Das ist halt so".
Spätestens bei solchen Zeilen habe ich dann erst recht keine Ahnung mehr, was eigentlich abgeht:
Irgendwie bekommt man das mit ein bisschen Hilfe von Google schon hin, aber ich bin so weit entfernt davon wirklich zu verstehen, was da überhaupt passiert.
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:
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
iteriert. Dies sei ein sog. "anti pattern". Ich habe das gegoogelt und bin auf eine interessante Seite gelangt:
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
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