Variabili di istanza e di classe
Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 13 di 64.
Le variabili di istanza sono uniche per ogni oggetto, mentre le variabili di classe sono condivise da tutti gli oggetti della stessa classe.
Ecco un esempio di una classe con entrambi i tipi di variabili
class Student:
# Variabile di classe - condivisa da tutte le istanze
school = "Python High School"
def __init__(self, name, grade):
# Variabili di istanza - specifiche di ogni studente
self.name = name
self.grade = gradeCrea oggetti student:
alice = Student("Alice", "A")
bob = Student("Bob", "B")Accedi alle variabili di istanza (uniche per ciascun oggetto):
print(alice.name) # Alice
print(bob.name) # Bob
print(alice.grade) # A
print(bob.grade) # BAccedi alle variabili di classe (condivise da tutti gli oggetti):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High SchoolOra modifica la variabile della classe:
Student.school = "Python Academy"Controlla in che modo la modifica influisce su tutte le istanze:
print(alice.school) # Python Academy
print(bob.school) # Python AcademyOutput:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyPuoi anche creare variabili di istanza dopo la creazione dell’oggetto:
alice.age = 16 # Questo crea una variabile di istanza
print(alice.age) # 16
# print(bob.age) # Questo causerebbe un errore: bob non ha ageDifferenza fondamentale: le variabili di istanza (create con self.variable_name) sono specifiche di ogni oggetto, mentre le variabili di classe (definite direttamente nella classe) sono condivise da tutti gli oggetti. Modificare una variabile di classe influisce su tutte le istanze.
Sfida
FacileCompleta un sistema bancario.. Definirai una classe BankAccount in un file e la userai in un altro.
Lavorerai con:
bank_account.py: definisci la classeBankAccountcon attributi e metodidriver.py: importa la classe, crea account e mostra le variabili di classe
Segui i commenti TODO in entrambi i file per le istruzioni dettagliate. I commenti ti guideranno nella creazione della classe con variabili e metodi appropriati e nel mostrare come le variabili di classe influiscono su tutte le istanze.
Provalo tu
# TODO: Importa la classe BankAccount da bank_account.py
from bank_account import BankAccount
# TODO: Crea due conti con questi dettagli esatti:
# - account1: titolare "Alice Smith" con un saldo di $1000
# - account2: titolare "Bob Jones" con un saldo di $2000
# TODO: Chiama display_info() per entrambi i conti
# TODO: Modifica la variabile di classe interest_rate impostandola a 0.03 (3%)
# Usa questo formato: BankAccount.interest_rate = 0.03
# TODO: Stampa il testo "After interest rate change:"
# TODO: Chiama di nuovo display_info() per entrambi i conti per mostrare che entrambi hanno il nuovo tasso di interesseQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti di OOP
File esterniIntroduzione a OOPClassi vs. oggettiIl parametro selfMetodiAttributiMetodo costruttore (__init__)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa funzione super()Sovrascrittura dei metodiEreditarietà multiplaOrdine di risoluzione dei metodiRiepilogo - Gerarchia dei dipendenti7Metodi speciali
Introduzione ai metodi magiciSovraccarico degli operatoriMetodi magici dei contenitoriRiepilogo - Lista personalizzata10Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello ObserverModello Strategy2Decoratori
Introduzione ai decoratoriDecoratore di proprietàDecoratore di metodo staticoDecoratore di metodo di classe5Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàMixinMetodi statici e di classeDecorator di classeContext manager11Pattern di progettazione - Parte 2
Pattern dei comandiPattern adattatorePattern decoratorePattern metodo templatePattern statoPattern composito3Proprietà delle classi
Variabili di istanza e di classeDecorator delle proprietàAttributi privatiRiepilogo - Gestore di conti bancari6Incapsulamento
Membri pubblici, protetti e privatiModificatori di accessoOccultamento delle informazioniDecorator delle proprietà: avanzatiRipasso - Sistema di registri degli studenti12Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e UtenteSistema di prestitoFunzionalità di ricercaInterfaccia amministratoreTest e integrazioneEsercitati da solo: Compilatore Python online