zoukankan      html  css  js  c++  java
  • Python类属性与实例属性理解

    按理讲,类属性改变,类的实例对象这个属性也应该被改变,但是在python中实际却不是这样

    class test():
        name = 111
    
    a = test()
    b = test()
    
    a.name = 222
    test.name = 333
    print(a.name,b.name,test.name)
    
    输出:
    222 333 333

    这里a.name的值没有被test.name = 333改变

    查看属性在内存中的位置

    print(id(a.name))
    print(id(b.name))
    print(id(test.name))
    
    输出:
    140705896729248
    2154539206672
    2154539206672

    再查看对象的属性

    print(a.__dict__)
    print(b.__dict__)
    print(test.__dict__)
    
    {'name': 222}
    {}
    {...'name': 333.....}

    所以当操作a对象给name属性赋值时,创建了a的name属性,可以理解为这个name已经不是类的属性而是a对象的属性了(好绕)

    b没有创建,所以当查询b.name的时候实际是查的test.name(内存位置相同)

    所以类属性与实例属性查询的优先级为: 实例属性>类属性     实例属性没有是会去查类属性

  • 相关阅读:
    之前总结的,现在要找工作了,给大家分享一下
    numpy总结
    django知识分支_1
    Django小总结
    ORM
    百度在线编辑器 配置修改
    百度在线编辑器
    TP5 路由使用
    cache 订单队列
    绘制静态地图API-高德地图
  • 原文地址:https://www.cnblogs.com/fengf233/p/10991028.html
Copyright © 2011-2022 走看看