Es gibt einige unterschiedliche Wege innerhalb einer Klasse auf Klassenattribute zuzugreifen, die sich teilweise in bestimmten Situationen verschieden verhalten. ===== Klassenmethode ===== class base(): a=5 @classmethod def ausgabe(cls): print(cls.a) class child(base) a=10 * Der Aufruf von "base.ausgabe" gibt 5 aus. * Der Aufruf von "child.ausgabe" gibt 10 aus * das liegt daran das der Parameter cls erst zum Zeitpunkt des Aufrufs übergeben wird und dann die Klasse repräsentiert über die die Funktion aufgerufen wird ===== __class__ ===== class base(): a=5 @staticmethod def ausgabe(): print(__class__.a) @staticmethod def ausgabe_neu(): print(__class__.a) class child(base) a=10 * Aufruf von "base.ausgabe" gibt 5 aus. * Aufruf von "child.ausgabe" gibt 5 aus * Aufruf von child.ausgabe_neu gibt 10 aus __class__ verweist auf die Klasse in der die (statische) Methode deklariert wurde, nicht auf die über die sie aufgerufen wird! \\ Da .ausgabe in base deklariert wurde, verweist __class__ auf base, im Gegensatz zu .ausgabe_neu welches in child deklariert wurde und dessen __class__ dann auf child verweist. ===== Direkter Verweis ===== class base(): a=5 @staticmethod def ausgabe(): print(base.a) class child(base) a=10 * base.ausgabe gibt 5 aus * child.ausgabe gibt 5 aus * base.a verweist immer auf a in der Klasse base und damit auf den Wert 5