Zmienne instancji a zmienne klasowe
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 13 z 64.
Zmienne instancji są unikalne dla każdego obiektu, natomiast zmienne klasowe są współdzielone przez wszystkie obiekty tej samej klasy.
Oto przykład klasy z obydwoma rodzajami zmiennych
class Student:
# Zmienna klasy - współdzielona przez wszystkie instancje
school = "Python High School"
def __init__(self, name, grade):
# Zmienne instancji - unikalne dla każdego ucznia
self.name = name
self.grade = gradeUtwórz obiekty uczniów:
alice = Student("Alice", "A")
bob = Student("Bob", "B")Uzyskaj dostęp do zmiennych instancji (unikalnych dla każdego obiektu):
print(alice.name) # Alice
print(bob.name) # Bob
print(alice.grade) # A
print(bob.grade) # BDostęp do zmiennych klasy (współdzielonych przez wszystkie obiekty):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High SchoolTeraz zmień zmienną klasy:
Student.school = "Python Academy"Sprawdź, jak zmiana wpływa na wszystkie instancje:
print(alice.school) # Python Academy
print(bob.school) # Python AcademyWynik:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyMożesz też utworzyć zmienne instancji po utworzeniu obiektu:
alice.age = 16 # To tworzy zmienną instancji
print(alice.age) # 16
# print(bob.age) # To spowodowałoby błąd — bob nie ma ageKluczowa różnica: zmienne instancji (tworzone za pomocą self.variable_name) są unikalne dla każdego obiektu, natomiast zmienne klasowe (definiowane bezpośrednio w klasie) są współdzielone przez wszystkie obiekty. Zmiana zmiennej klasowej wpływa na wszystkie instancje.
Wyzwanie
ŁatwyUkończ system bankowy.. Zdefiniujesz klasę BankAccount w jednym pliku i użyjesz jej w innym.
Będziesz pracować z:
bank_account.py: Zdefiniuj klasęBankAccountz atrybutami i metodamidriver.py: Zaimportuj klasę, utwórz konta i pokaż zmienne klasowe
Postępuj zgodnie z komentarzami TODO w obu plikach, aby wykonać instrukcje krok po kroku. Komentarze przeprowadzą Cię przez tworzenie klasy z odpowiednimi zmiennymi i metodami oraz pokażą, jak zmienne klasowe wpływają na wszystkie instancje.
Spróbuj swoich sił
# TODO: Zaimportuj klasę BankAccount z pliku bank_account.py
from bank_account import BankAccount
# TODO: Utwórz dwa konta z dokładnie takimi danymi:
# - account1: właściciel "Alice Smith", saldo $1000
# - account2: właściciel "Bob Jones", saldo $2000
# TODO: Wywołaj display_info() dla obu kont
# TODO: Zmień zmienną klasową interest_rate na 0.03 (3%)
# Użyj tego formatu: BankAccount.interest_rate = 0.03
# TODO: Wypisz tekst "After interest rate change:"
# TODO: Ponownie wywołaj display_info() dla obu kont, aby pokazać, że oba mają nową stopę procentowąTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektyParametr selfMetodyAtrybutyMetoda konstruktora (__init__)Powtórzenie – prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaFunkcja super()Nadpisywanie metodDziedziczenie wielokrotneKolejność rozwiązywania metodPodsumowanie – hierarchia pracowników7Metody specjalne
Wprowadzenie do metod magicznychPrzeciążanie operatorówMagiczne metody kontenerówPowtórka – własna lista10Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy2Dekoratory
Wprowadzenie do dekoratorówDekorator propertyDekorator metody statycznejDekorator metody klasowej5Polimorfizm
Ponowne omówienie nadpisywania metodTypowanie kaczeKlasy i metody abstrakcyjneProjektowanie interfejsówPodsumowanie — kalkulator kształtów8Zaawansowane koncepcje programowania obiektowego
Kompozycja a dziedziczenieMiksyMetody statyczne i klasoweDekoratory klasMenedżery kontekstu11Wzorce projektowe, część 2
Wzorzec PolecenieWzorzec AdapterWzorzec DekoratorWzorzec Metoda szablonowaWzorzec StanWzorzec Kompozyt3Właściwości klas
Zmienne instancji a zmienne klasoweDekoratory właściwościAtrybuty prywatnePowtórzenie — menedżer kont bankowych6Hermetyzacja
Public, Protected, Private — pamięćModyfikatory dostępuUkrywanie informacjiDekoratory właściwości — zaawansowanePodsumowanie — system ewidencji uczniów12Projekt: System zarządzania biblioteką
Przegląd projektuKlasy Book i UserSystem wypożyczeńFunkcja wyszukiwaniaInterfejs administratoraTestowanie i integracjaPoćwicz samodzielnie: Kompilator Python online