zoukankan      html  css  js  c++  java
  • python 面试大全: 01_类变量在内部是作为字典处理的

    #_*_ encoding: utf-8 _*_   @author: ty  hery   2019/9/6
    
    class Parent(object):
        x = 1
    class Child1(Parent):
        pass
    class Child2(Parent):
        pass
    print (Parent.x, Child1.x, Child2.x)         #  1, 1, 1
    Child1.x = 2
    print (Parent.x, Child1.x, Child2.x)         #  1, 2, 1
    Parent.x = 3
    print (Parent.x, Child1.x, Child2.x)        #  3, 2, 3
    

    '''使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。为什么改变了 Parent.x 的值还会改变
    Child2.x 的值,但是同时 Child1.x 值却没有改变?
    这个答案的关键是,在 Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字
    典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所
    在的类又没有在祖先类中找到,会引发一个 AttributeError 异常 )。
    因此,在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语
    句的输出是 1 1 1。
    https://www.cnblogs.com/xuchunlin/p/6049371.html 2/61
    随后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2),然后,该值仅仅在子类中被改
    变。这就是为什么第二个 print 语句的输出是 1 2 1。
    最后,如果该值在父类中被改变(例如,我们执行语句 Parent.x = 3),这个改变会影响到任何未重写该值的
    子类当中的值(在这个示例中被影响的子类是 Child2)。这就是为什么第三个 print 输出是 3 2 3。'''

    写入自己的博客中才能记得长久
  • 相关阅读:
    Django shortcut functions
    Android 度量单位
    WPF 资源
    WPF Template
    python 常用库
    python 元类
    android中控制ListView宽度和高度
    layout可以显示,程序调用就出错
    请问在pulltorefreshGridView中的图片设置了大小之后怎么就不显示了呢
    Activity表单传值问题
  • 原文地址:https://www.cnblogs.com/heris/p/14642299.html
Copyright © 2011-2022 走看看