Принадлежность обьекта к классу после изменения - Дневник AmicA__LuciS
У нас есть простой класс:
class Test:
n = 5
# Создадим два экземпляра этого класса:
name1 = Test()
name2 = Test()
print(f'{name1.n}, {name2.n}, {Test.n}) # 5, 5, 5
Теперь попробуем изменить один из экземпляров, затем изменим Test.n:
name1.n = 10
print(name1.n) # 10 (Test.n и name2.n на данный момент равны 5)
Test.n = 15 # Изменение самого объекта класса должно повлиять на все ссылки, связанные с ним, но эти изменения не коснуться ссылки name1
print(f'{name1.n}, {name2.n}, {Test.n}) # 10, 15, 15 (соответственно можно предположить, что объект name1 теперь не является объектом класса Test)
#Мы можем проверить принадлежность name1 классу Test:
print(isinstance(name1, Test) # True
Мне объяснили, что этот момент у экземпляра появляется собственный атрибут n, который перекроет (переопределит) родительский, то есть тот, который достался от класса. Но тогда не ясно, почему:
> print(isinstance(name1, Test) # True
Я предполагаю, что на самом деле у нас теперь есть два экземпляра класса Test с одинаковым именем - на первый ссылается name1, на второй ссылается name2. И когда мы пишем Test.n питон работает именно с тем экземпляром на который ссылается name2. Если это так, то где определяется структура экземпляра Test на который ссылается name1? Мы же по сути можем создать в этом экземпляре свои атрибуты, и единственная возможность получить к нему доступ - это через ссылку name1 :
name1.l = 24
В конце концов он может не иметь ничего общего по структуре с классом Test, может для таких объектов без шаблона есть своё название?
Изм. AmicA__LuciS (23 Ноября 2024 в 08:59)
15
class Test:
n = 5
# Создадим два экземпляра этого класса:
name1 = Test()
name2 = Test()
print(f'{name1.n}, {name2.n}, {Test.n}) # 5, 5, 5
Теперь попробуем изменить один из экземпляров, затем изменим Test.n:
name1.n = 10
print(name1.n) # 10 (Test.n и name2.n на данный момент равны 5)
Test.n = 15 # Изменение самого объекта класса должно повлиять на все ссылки, связанные с ним, но эти изменения не коснуться ссылки name1
print(f'{name1.n}, {name2.n}, {Test.n}) # 10, 15, 15 (соответственно можно предположить, что объект name1 теперь не является объектом класса Test)
#Мы можем проверить принадлежность name1 классу Test:
print(isinstance(name1, Test) # True
Мне объяснили, что этот момент у экземпляра появляется собственный атрибут n, который перекроет (переопределит) родительский, то есть тот, который достался от класса. Но тогда не ясно, почему:
> print(isinstance(name1, Test) # True
Я предполагаю, что на самом деле у нас теперь есть два экземпляра класса Test с одинаковым именем - на первый ссылается name1, на второй ссылается name2. И когда мы пишем Test.n питон работает именно с тем экземпляром на который ссылается name2. Если это так, то где определяется структура экземпляра Test на который ссылается name1? Мы же по сути можем создать в этом экземпляре свои атрибуты, и единственная возможность получить к нему доступ - это через ссылку name1 :
name1.l = 24
В конце концов он может не иметь ничего общего по структуре с классом Test, может для таких объектов без шаблона есть своё название?
Изм. AmicA__LuciS (23 Ноября 2024 в 08:59)
15
Автор: AmicA__LuciS
23 Ноября 2024 в 08:58