Может быть интересно распечатать все результаты и проанализировать. Я изменил функцию __repr__
для классов A и B, чтобы мы могли легко печатать их между каждой операцией. Я добавил вывод между каждой строкой "print".
class A:
def __init__ (self):
self.i = 3
def doubled (self):
self.i *= 2
def __repr__ (self):
return str(self.i)
class B:
def __init__ (self, an_a_object):
self.a = an_a_object
def put (self, an_a_object):
self.a = an_a_object
def __repr__ (self):
return str(self.a.i)
a1 = A()
b1 = B(a1)
a2 = None
b2 = None
def show():
print("a1 =", a1, ", a2 =", a2, ", b1 =", b1, ", b2 =", b2)
show()
# a1 = 3 , a2 = None , b1 = 3 , b2 = None
b1.a.doubled()
show()
# a1 = 6 , a2 = None , b1 = 6 , b2 = None
a2 = A()
show()
# a1 = 6 , a2 = 3 , b1 = 6 , b2 = None
b1.put(a2)
show()
# a1 = 6 , a2 = 3 , b1 = 3 , b2 = None
b2 = B(a1)
show()
# a1 = 6 , a2 = 3 , b1 = 3 , b2 = 6
b2.a.doubled()
show()
# a1 = 12 , a2 = 3 , b1 = 3 , b2 = 12
b1.a.doubled()
show()
# a1 = 12 , a2 = 6 , b1 = 6 , b2 = 12
b2.put(b1.a)
show()
# a1 = 12 , a2 = 6 , b1 = 6 , b2 = 6