Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:zugriff_auf_class_members

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
python/zugriff_auf_class_members.txt · Zuletzt geändert: 2022/04/04 13:18 von root