0Pricing
Python Academy · Lektion

Instanz- und Klassenattribute

Unterscheiden Sie zwischen objektbezogenen Daten und gemeinsam genutzten Daten auf Klassenebene.

Instanz- und Klassenattribute ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

Das Verständnis des Unterschieds zwischen Instanz- und Klassenattributen verhindert schwer erkennbare Fehler und ermöglicht einen effizienten gemeinsamen Zustand.

Klassenattribut

class Dog: legs = 4 — legs wird von allen Instanzen gemeinsam verwendet. Zugriff über Dog.legs oder dog.legs.
class Dog:
    legs = 4
print(Dog.legs)
print(Dog().legs)

Instanzattribut

self.name = name in __init__ ist instanzspezifisch. Jeder Dog besitzt einen eigenen Namen.
class Dog:
    def __init__(self, name):
        self.name = name
d1 = Dog('Rex')
d2 = Dog('Buddy')
print(d1.name, d2.name)

Reihenfolge der Attributsuche

Python überprüft zuerst das __dict__ der Instanz, dann das __dict__ der Klasse und anschließend die Basisklassen. Instanzattribute überschreiben Klassenattribute.
class C:
    x = 10
c = C()
c.x = 99  # instance shadows class attr
print(c.x)  # 99
print(C.x)  # 10

Falle mit veränderlichen Klassenattributen

class C: items = [] — ALLE Instanzen verwenden dieselbe Liste. Das Anhängen bei einer Instanz wirkt sich auf alle aus!
class C:
    items = []
C.items.append(1)
print(C().items)  # [1] — shared!

Die Falle mit veränderlichen Attributen vermeiden

Verschieben Sie die Initialisierung nach __init__: def __init__(self): self.items = [] Jede Instanz erhält ihre eigene Liste.
class C:
    def __init__(self):
        self.items = []
c1 = C(); c2 = C()
c1.items.append(1)
print(c1.items, c2.items)

__dict__ untersuchen

obj.__dict__ ist das Dictionary der Instanzattribute. Class.__dict__ ist das Dictionary der Klassenattribute.
class Dog:
    legs = 4
    def __init__(self, name): self.name = name
d = Dog('Rex')
print(d.__dict__)
print(Dog.__dict__.keys())

Klassenmethoden als Factory-Methoden

@classmethod erhält cls (die Klasse) statt self. Verwenden Sie sie als alternative Konstruktoren.
class Date:
    def __init__(self, y, m, d): self.y,self.m,self.d=y,m,d
    @classmethod
    def from_string(cls, s):
        y,m,d=map(int,s.split('-'))
        return cls(y,m,d)
dt=Date.from_string('2024-01-15')
print(dt.y,dt.m,dt.d)

Statische Methoden

@staticmethod hat weder self noch cls. Verwenden Sie sie für Hilfsfunktionen, die logisch zu einer Klasse gehören, aber weder die Instanz noch die Klasse benötigen.
class MathUtils:
    @staticmethod
    def add(a, b): return a + b
print(MathUtils.add(3, 4))

Instanzen mit einem Klassenattribut zählen

Ein Klassenattribut als Zähler erfasst, wie viele Instanzen erstellt wurden.
class Widget:
    count = 0
    def __init__(self):
        Widget.count += 1
Widget(); Widget(); Widget()
print(Widget.count)

hasattr() und vars()

hasattr(obj, 'name') überprüft, ob ein Attribut vorhanden ist. vars(obj) entspricht obj.__dict__.
class P:
    def __init__(self, x): self.x = x
p = P(5)
print(hasattr(p, 'x'), hasattr(p, 'z'))
print(vars(p))

Kurzer Test

Was geschieht, wenn Sie aus einer Instanz an eine veränderliche Klassenattributliste anhängen?

Zusammenfassung

Klassenattribute werden gemeinsam verwendet, Instanzattribute gehören zu jeweils einem Objekt. Die Instanzsuche überschattet die Klassensuche. Initialisieren Sie veränderliche Werte in __init__. Verwenden Sie @classmethod für Factory-Methoden.

Weiter

Ausgezeichnet! Fahren Sie mit der nächsten Lektion fort, um Ihre Fähigkeiten zu vertiefen.

Häufig gestellte Fragen

Ist die Lektion „Instanz- und Klassenattribute“ kostenlos?

Ja — der vollständige Text von „Instanz- und Klassenattribute“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Instanz- und Klassenattribute“?

Unterscheiden Sie zwischen objektbezogenen Daten und gemeinsam genutzten Daten auf Klassenebene. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Instanz- und Klassenattribute“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Klassen und die __init__-Methode
  2. Instanz- und Klassenattribute
  3. Instanzmethoden und self
  4. Magic Methods: __str__ und __repr__
← Zurück zu Python Academy