关于子类访问父类的类变量问题
Python作为一门弱类型语言,创建变量时不用像C语言那样事先声明(如:int xxx/char xxx),只要是=
符号左边的变量Python找不到,它就会自己去创建。源此有题如下:
class A(object):
x = 1
class B(A):
pass
class C(A):
pass
B.x = 2
A.x = 3
print(A.x, B.x, C.x)
问:输出结果为何?
答:3 2 3
这是因为,在执行B.x = 2
这一语句时,B发自己没有x诶,那就创建一个咯!C不同,没有=
让它创建变量,于是去父类那里找,因此输出跟A.x
的值一样。
如何证明B.x
中的x不是A中的x呢?很简单,比较id值:
In [75]: A.x is C.x
Out[75]: True
In [76]: A.x is B.x
Out[76]: False