zoukankan      html  css  js  c++  java
  • __dict__属性详解

    1.类的__dict__属性和类对象的__dict__属性

    class Parent(object):
        a = 'a'
        b = 1
    
        def __init__(self):
            self.a = 'A'
            self.b = 1.1
    
        def print_info(self):
            print('a = %s , b = %s' % (self.a, self.b))
    
        @staticmethod
        def static_test(self):
            print
            'a static func.'
    
        @classmethod
        def class_test(self):
            print
            'a calss func.'
    
    
    # class Son(Parent):
    
    p = Parent()
    print(Parent.__dict__)
    print(p.__dict__)

    运行结果如下:

    {'__module__': '__main__', 'a': 'a', 'b': 1, '__init__': <function Parent.__init__ at 0x0000000002168950>, 'print_info': <function Parent.print_info at 0x00000000021689D8>, 'static_test': <staticmethod object at 0x00000000021677B8>, 'class_test': <classmethod object at 0x0000000002167DD8>, '__dict__': <attribute '__dict__' of 'Parent' objects>, '__weakref__': <attribute '__weakref__' of 'Parent' objects>, '__doc__': None}
    {
    'a': 'A', 'b': 1.1}

    由此可见, 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的

      对象的__dict__中存储了一些self.xxx的一些东西

    2.存在继承关系的

      子类有自己的__dict__, 父类也有自己的__dict__,子类的全局变量和函数放在子类的dict中,父类的放在父类dict中。

      

    class Parent(object):
        a = 'a'
        b = 1
    
        def __init__(self):
            self.a = 'A'
            self.b = 1.1
    
    
    class Son(Parent):
        a = 'b'
        b = 2
    
        def __init__(self):
            self.b = 2.2
            self.a = 'B'
    
    
    p = Parent()
    print(Parent.__dict__)
    print(p.__dict__)
    s = Son()
    print(Son.__dict__)
    print(s.__dict__)

     运行上面的代码,结果入下: 

        

    {'__module__': '__main__', 'a': 'a', 'b': 1, '__init__': <function Parent.__init__ at 0x0000000002278950>, '__dict__': <attribute '__dict__' of 'Parent' objects>, '__weakref__': <attribute '__weakref__' of 'Parent' objects>, '__doc__': None}
    {'a': 'A', 'b': 1.1}
    {'__module__': '__main__', 'a': 'b', 'b': 2, '__init__': <function Son.__init__ at 0x00000000022789D8>, '__doc__': None}
    {'b': 2.2, 'a': 'B'}

      

     再看内置的数据类型, 类 == 类型,但内置数据是没有__dict__属性

     

    num = 3
    ll = []
    dd = {}

    运行结果:

      

    Traceback (most recent call last):
      File "D:/python_studay/day8/__dict__属性详解.py", line 31, in <module>
        num.__dict__
    AttributeError: 'int' object has no attribute '__dict__'

    总结:

      1.内置的数据类型是没有__dict__属性

      2.类的__dict__存放类这个名称空间里有的数据,但类实例化的对象__dict__属性只存放对象的名称空间的数据。比如self.xx

      3.类存在继承关系,父类的__dict__ 并不会影响子类的__dict__

  • 相关阅读:
    最新版-Python和Java实现Aes相互加解密
    tasker 实现短信监听和转发 解决短信验证码登录问题
    某宁 价格爬取 python
    python 获取 某东商品评论数
    xpath 使用
    frida hook 重载函数的几种写法
    Python 爬虫遇到形如 &#x5c0f;&#x8bf4; 的编码如何转换为中文?
    python 使用 pymysql 存,改dic类型数据
    Excel甘特图制作
    关于sunlike ERP的问题解决集
  • 原文地址:https://www.cnblogs.com/linbin7/p/11121509.html
Copyright © 2011-2022 走看看