Есть такой код:
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
1)
a.__class__ = B a.bar #bar
A = B a.bar #AttributeError: 'A' object has no attribute 'bar'
И второй момент:
1)
a.__class__ = B a = A('a')
2)
A = B a = A()
А во втором случае могу создать новый экземпляр, не передавая значение атрибута в класс A, иначе возникает исключение: “2 аргумент передан”. Понятно, что этот атрибут получен из B. Но почему же тогда в 1 случае я должен передать значение атрибута, а во втором нет