• Python3学习笔记21-实例属性和类属性


    由于Python是动态语言,根据类创建的实例可以任意绑定属性。

    给实例绑定属性的方法是通过实例变量,或者通过self变量:

    class Student(object):
        def __init__(self,name):
            self.name = name
    s = Student('Bob')
    s.score = 90

    但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有

    class Student1(object):
        name = 'Student'
    a = Student1()—#创建实例
    print(a.name)#打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
    a.name = 'Michael'# 给实例绑定name属性
    print(a.name)#由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
    print(Student1.name)#但是类属性并未消失,用Student.name仍然可以访问
    del(a.name)#如果删除实例的name属性
    print(a.name)#再次调用a.name,由于实例的name属性没有找到,类的name属性就显示出来了

     



    实例属性属于各个实例所有,互不干扰;

    类属性属于类所有,所有实例共享一个属性;

    不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。



    练习

    为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:

    class Student2(object):
        count = 0
    
    
        def __init__(self, name):
            self.name = name
            Student2.count = Student2.count+1
    if Student2.count != 0:
        print('测试失败1!')
    else:
        bart = Student2('Bart')
        if Student2.count != 1:
            print('测试失败2!')
        else:
            lisa = Student2('Bart')
            if Student2.count != 2:
                print('测试失败3!')
            else:
                print('Students:', Student2.count)
                print('测试通过!')
  • 相关阅读:
    动态模板列更新数据分页的例子
    Oracle SCN机制解析
    阻止特定的ip登陆数据库的2种方法 (轉)
    Oracle动态执行SQL四种方式的例子
    使用Oracle的DBMS_SQL包执行动态SQL语句
    Oracle XML DB之浅入浅出
    将oracle设为归档模式和非归档模式启动的方法
    如何修改Oracle數據庫字符集
    (原創)C#使用QueryTables導出到Excel
    常用SQL語句2
  • 原文地址:https://www.cnblogs.com/myal/p/9337409.html
Copyright © 2020-2023  润新知