Форум сайта python.su
Читал статью и не могу разобраться в одном моменте,поясните пожалуйста почему это так работает:
Есть такой код:
class A: qux = "A" def __init__(self,name): self.name = name def foo(self): print('foo') class B: qux = "B" def __init__(self): self.name = "B OBJECT" def bar(self): print('bar') a = A('a')
print(A is a.__class__) #True print(A == a.__class__) #True
a.__class__ = B a.bar #bar
A = B a.bar #AttributeError: 'A' object has no attribute 'bar'
a.__class__ = B a = A('a')
A = B a = A()
Отредактировано alemeor (Дек. 27, 2017 22:14:38)
Офлайн
alemeorПотому что вы изменили класс “A”, но объект “а” уже создан, его класс не поменялся, у него остался старый класс. Питон - это такая странная штука, в питоне вообще все - объекты. Даже функции, даже классы. Переменная, которая хранит объект - это просто адрес ячейки памяти, с которой начинаются данные объекта. Когда вы пишите вот такое
Почему во 2 случае bar нет в А
a = Foo() a = Bar()
A = B a.bar
a.__class__ = B a = A('a')
Офлайн