关于子类访问父类的类变量问题

关于子类访问父类的类变量问题

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
posted @ 2018-09-20 16:05  有关心情  阅读(1573)  评论(0编辑  收藏  举报