zoukankan      html  css  js  c++  java
  • Python 类的属性和实例属性 Python 的动态语言

    #定义一下类, 含有类属性 aaa,

    >>> class Aa: 
    ... aaa = 10
    ... 

    #对类 Aa实例化出一个实例 a1
    >>> a1 = Aa() 
    >>> print(a1.__dict__)#查看实例并没有自己的方法和属性
    {}
    >>> a1.aaa #但是这个实例在调用属性的时候, 发现自己没有这个属性, 于是去找其类有没有这个属性, 找到了就返回类的属性
    10
    >>> print(a1.__dict__)# 但是实例 a1仍然没有自己的属性, 只是调用类的. 
    {}
    >>> a1.aaa += 2 #一旦用等号对a1.aaa 进行赋值运算, 就等同于a1.aaa = 12.给 a1 setatrr 了一个属性, 
    >>> print(a1.__dict__) #而且名字也是 aaa. 这里就成了实例发生. 优先于类属性
    {'aaa': 12}
    >>> a1.aaa
    12
    >>> a2 = Aa() #再实例化一个对象
    >>> a2.aaa
    10
    >>> print(a2.__dict__) #新对象没有自己的实例属性
    {}
    >>>

    >>> Aa.aaa #类的属性没有发生改变
    10
    >>> Aa.aaa += 5 #现在把类的属性的值在内存中变成15
    >>> Aa.aaa
    15
    >>> a2.aaa #对于没有自己实例属性的 a2来说, 还是只能调用类的属性,新值15
    15
    >>> a1.aaa #而 a1有了自己的实例属性, 就不再随类属性变化了, 虽然属性名相同, 但是指向的对象已经不同
    12
    >>> a3 = Aa() #再来实例化一个 a3, 实例化的时候, aaa = 10这一句已经不再作用于类属性 Aa.aaa,
    >>> a3.aaa #难留内存的类属性的值是15
    15
    >>>

    >>> Aa.aaa  #现在不明白的是, Aa.aaa 已经不是 已经把 aaa 抛弃了? 要不然在实例化的时候, aaa = 10怎么办?
    15
    >>>#看下图解读:

     

  • 相关阅读:
    angularjs学习笔记—事件指令
    JS编写点击页面弹出被点击的标签名
    对数据进行排序
    springBoot集成seata
    maven打包时根据不同的环境生成不同的jar包名称
    单列模式-双重锁校验解析
    hashmap原理简述
    Linux搭建disconf(二)
    Linux搭建dubbo-admin 分布式服务监控中心
    Linux安装zookeeper
  • 原文地址:https://www.cnblogs.com/guiyuhua/p/8639467.html
Copyright © 2011-2022 走看看