Instanz- vs. Klassenvariablen
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 13 von 64.
Instanzvariablen sind für jedes Objekt eindeutig, während Klassenvariablen von allen Objekten derselben Klasse gemeinsam genutzt werden.
Hier ist ein Beispiel für eine Klasse mit beiden Arten von Variablen
class Student:
# Klassenvariable - von allen Instanzen geteilt
school = "Python High School"
def __init__(self, name, grade):
# Instanzvariablen - eindeutig für jeden Schüler
self.name = name
self.grade = gradeErstellen Sie Student-Objekte:
alice = Student("Alice", "A")
bob = Student("Bob", "B")Greifen Sie auf Instanzvariablen zu (einzigartig für jedes Objekt):
print(alice.name) # Alice
print(bob.name) # Bob
print(alice.grade) # A
print(bob.grade) # BZugriff auf Klassenvariablen (gemeinsam von allen Objekten genutzt):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High SchoolÄndern Sie nun die Klassenvariable:
Student.school = "Python Academy"Prüfen Sie, wie sich die Änderung auf alle Instanzen auswirkt:
print(alice.school) # Python Academy
print(bob.school) # Python AcademyAusgabe:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademySie können Instanzvariablen auch nach der Objekterstellung erstellen:
alice.age = 16 # Dies erstellt eine Instanzvariable
print(alice.age) # 16
# print(bob.age) # Dies würde einen Fehler verursachen - bob hat kein ageHauptunterschied: Instanzvariablen (erstellt mit self.variable_name) sind für jedes Objekt eindeutig, während Klassenvariablen (direkt in der Klasse definiert) von allen Objekten gemeinsam genutzt werden. Das Ändern einer Klassenvariable wirkt sich auf alle Instanzen aus.
Aufgabe
EinfachVervollständigen Sie ein Bankensystem. Sie werden eine BankAccount-Klasse in einer Datei definieren und sie in einer anderen verwenden.
Sie arbeiten mit:
bank_account.py: Definieren Sie dieBankAccount-Klasse mit Attributen und Methodendriver.py: Importieren Sie die Klasse, erstellen Sie Konten und demonstrieren Sie Klassenvariablen
Folgen Sie den TODO-Kommentaren in beiden Dateien für Schritt-für-Schritt-Anleitungen. Die Kommentare führen Sie durch die Erstellung der Klasse mit den richtigen Variablen und Methoden und zeigen, wie Klassenvariablen alle Instanzen beeinflussen.
Spickzettel
Instanzvariablen sind für jedes Objekt eindeutig, während Klassenvariablen von allen Objekten derselben Klasse gemeinsam genutzt werden.
Klasse mit beiden Variablentypen:
class Student:
# Class variable - shared by all instances
school = "Python High School"
def __init__(self, name, grade):
# Instance variables - unique to each student
self.name = name
self.grade = gradeZugriff auf Instanzvariablen (eindeutig für jedes Objekt):
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # BobZugriff auf Klassenvariablen (von allen Objekten gemeinsam genutzt):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High SchoolDas Ändern von Klassenvariablen wirkt sich auf alle Instanzen aus:
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python AcademyInstanzvariablen nach der Objekterstellung erstellen:
alice.age = 16 # This creates an instance variable
print(alice.age) # 16Probier es selbst
# TODO: Importiere die BankAccount-Klasse aus bank_account.py
from bank_account import BankAccount
# TODO: Erstelle zwei Konten mit diesen genauen Details:
# - account1: Inhaber "Alice Smith" mit 1000 $ Kontostand
# - account2: Inhaber "Bob Jones" mit 2000 $ Kontostand
# TODO: Rufe display_info() für beide Konten auf
# TODO: Ändere die Klassenvariable interest_rate auf 0.03 (3 %)
# Verwende dieses Format: BankAccount.interest_rate = 0.03
# TODO: Gib den Text "After interest rate change:" aus
# TODO: Rufe display_info() erneut für beide Konten auf, um zu zeigen, dass beide den neuen Zinssatz habenDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen