zoukankan      html  css  js  c++  java
  • Python类的特点 (2) :类属性与实例属性的关系

    测试代码:

     1 #encoding:utf-8
     2 class Parent(object):
     3     x=1 #x是Parent类的属性(字段)
     4     ls=[1,2] #ls是一个列表,也是Parent类的属性(字段)
     5         
     6 class Child1(Parent):
     7     y=2
     8 
     9 class Child2(Parent):
    10     pass
    11     
    12 if __name__=='__main__':
    13     '''对于类属性:子类与父类的关系是,如果子类重写了继承的值就用子类自己的属性值,否则就用父类的属性值'''
    14     print Parent.x,Child1.x,Child2.x
    15     Child1.x=2
    16     print Parent.x,Child1.x,Child2.x
    17     Parent.x=3
    18     print Parent.x,Child1.x,Child2.x
    19     print '--------------------'
    20     
    21     '''类属性和实例属性的关系:'''
    22     '''#1:若实例的属性值没有重新赋值,则类属性值的改变也会导致实例的属性值的改变。'''
    23     p=Parent()
    24     print Parent.x,p.x
    25     Parent.x=5
    26     print Parent.x,p.x
    27     print '--------------------'
    28     
    29     '''#2:对于不可变类型(数值型、bool型、字符串型等)的属性值,若实例的属性值已经重新赋值,则类的属性值与该实例的属性值相互独立,互不影响。'''
    30     p.x=11
    31     print Parent.x,p.x
    32     Parent.x=6
    33     print Parent.x,p.x
    34     print '--------------------'
    35     
    36     '''#3.对于可变类型(数值型、bool型、字符串型等)的属性值,实例的属性值和类的属性值,两者是是始终相关联的,实例属性值的改变会引起类属性值的改变,反之亦然。'''
    37     print Parent.ls,p.ls
    38     p.ls.append(3)
    39     print Parent.ls,p.ls
    40     p2=Parent()
    41     p2.ls.append(4)
    42     print p.ls,p2.ls,Parent.ls
    43     print '--------------------'
    44     
    45     Parent.ls.append(9)
    46     print Parent.ls,p.ls
    47     print '--------------------'
    48     
    49     '''临时对不存在的实例属性进行赋值,是允许的,但只对该实例对象有效,对类及其他实例对象无效'''
    50     p3=Parent()
    51     p.w=12
    52     print p.w
    53     print p3.w #有时报错,有时不报错,应该是编译器Python2.7.11的bug,正常应该报错
    54     print Parent.w #报错
    55     
    56     '''临时对不存在的类属性进行赋值,也是允许的,并且会影响所有实例'''
    57     Parent.newField=10
    58     print Parent.newField,p.newField,p2.newField,p3.newField#均为10
    59     

    输出结果:(忽略第53、54行的错误的话)

    1 1 1
    1 2 1
    3 2 3
    --------------------
    3 3
    5 5
    --------------------
    5 11
    6 11
    --------------------
    [1, 2] [1, 2]
    [1, 2, 3] [1, 2, 3]
    [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4]
    --------------------
    [1, 2, 3, 4, 9] [1, 2, 3, 4, 9]
    --------------------
    12
    10 10 10 10
  • 相关阅读:
    华东交通大学2017年ACM双基程序设计大赛题解
    hdu2010(dfs+剪枝)
    欧拉函数phic以及超大数的快速幂
    想了一天的题目QAQ 毛线数列的最值
    记一下STL的一个题
    hdu1877进制转换
    hdu1002大数相加
    hdu1576逆元的一道水题
    Courses
    CodeForce-813B The Golden Age(数学+枚举)
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5588806.html
Copyright © 2011-2022 走看看