Rozdział 14 · Tworzenie rzeczywistych obiektów
Atrybuty instancji i klas
Jedna cecha może istnieć w obiekcie, a inna w samej klasie, która jest wspólna dla wszystkich. To nie to samo.
Dwa miejsca, gdzie atrybut może występować
Do tej pory wszystkie atrybuty były tworzone wewnątrz __init__ przez
self.имя = ... jest atrybuty instancji, u
każdy obiekt ma swój własny. Ale atrybut może być również zadeklarowany bezpośrednio w ciele klasy, bez
self — to tak jest atrybut klasy, jeden za wszystkich
Obiekty jednocześnie:
atribut_klassa.py
class Sobaka:
vid = „Dog” # atrybut KLASY – jeden za wszystkich
def __init__(self, klichka, vozrast):
self.klichka = klichka # Atrybut INSTANCJI jest inny dla każdego
self.vozrast = vozrast
rex = Sobaka(„Rex”, 3)
sharik = Sobaka(„Ball”, 5)
print(rex.vid, sharik.vid) # Pies Pies to częsta cecha
Powszechne nieporozumienie: „atrybuty klasowe są kopiowane do każdego obiektu”
To nieprawda.
vid przechowywane RAZ, w samej klasie Sobaka. Kiedy piszesz rex.vid, Python pierwsze spojrzenia vid wśród atrybutów INSTANCJI rex – nie znajduje jej – i dopiero potem patrzy na klasę Sobaka, gdzie znajduje wspólną wartość. Żaden bajt vid nie jest kopiowany do rex.Jeśli ustawisz atrybut o tej samej nazwie na VIA OBJECT, Python utworzy nowy Atrybut INSTANCE, który teraz „okultyfikuje”
zatenenie.py
rex.vid = „Kundel” # tworzy vid na rex bez dotykania klasy
print(rex.vid, sharik.vid) # Kundel – sharik niezmieniony
Praktyka: Atrybuty instancji i klas
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji