在python中,如果将一个类A的实例对象realA作为形参传递给第二个类B,第二个类B拥有的属性之一classA就是第一个类的实例realA,然后根据第二个类B建立实例对象realB,此实例对象的属性类realB.classA的属性realB.classA.valueA实际上就是实例realA.valueA,属性类realB.classA实际上就是实例类realA。
简单来说,将类对象作为形参进行传递时,传递的只是一个指针,不论是对实例realA进行操作,还是对实例realB.realA进行操作,最终结果是一样的。
如下例所示,realA和realB.classA的内存地址是一样的,说明二者指向同一类实例。
class A():
def __init__(self):
self.valueA = 0
realA = A()
class B():
def __init__(self, realA):
self.classA = realA
realB = B(realA)
print(realA.valueA)
print(realB.classA.valueA)
print(id(realA))
print(id(realB.classA))
realA.valueA = 19
print(realA.valueA)
print(realB.classA.valueA)
print(id(realA))
print(id(realB.classA))
realB.classA.valueA = 9
print(realA.valueA)
print(realB.classA.valueA)
print(id(realA))
print(id(realB.classA))
# 输出如下
0
0
28023024
28023024
19
19
28023024
28023024
9
9
28023024
28023024
注意,如果为了方便,其实可以将classA直接用realA替换,形式上就会更为统一。