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
    >>>#看下图解读:

     

  • 相关阅读:
    列表
    Pyunit测试框架
    Jmeter性能测试入门(转)
    Monkey for iOS(CrashMonkey4IOS)
    美化iTerm2
    不经过 App store 的安装方式(转)
    Mac上部署JDK/Ant/Jmeter/Jenkins
    display:inline-block元素之间错位问题
    vue项目安装依赖报错没有python
    正则匹配所有li标签内容
  • 原文地址:https://www.cnblogs.com/guiyuhua/p/8639467.html
Copyright © 2011-2022 走看看