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


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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM