Es gibt einige unterschiedliche Wege innerhalb einer Klasse auf Klassenattribute zuzugreifen, die sich teilweise in bestimmten Situationen verschieden verhalten.
class base():
a=5
@classmethod
def ausgabe(cls):
print(cls.a)
class child(base)
a=10
class base():
a=5
@staticmethod
def ausgabe():
print(__class__.a)
@staticmethod
def ausgabe_neu():
print(__class__.a)
class child(base)
a=10
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.
class base():
a=5
@staticmethod
def ausgabe():
print(base.a)
class child(base)
a=10