python中的__dict__属性介绍

将字典转换成对象的小技巧:

bokeyuan = {"b": 1,
                "o": 2,
                "k": 3,
                "e": 4,
                "y": 5,
                "u": 6,
                "a": 7,
                "n": 8,
                }
 
class Dict2Obj:
 
    # def __init__(self, bokeyuan):
    #     self.b = bokeyuan['b']
    #     self.o = bokeyuan['o']
    #     self.k = bokeyuan['k']
    #     self.e = bokeyuan['e']
    #     self.y = bokeyuan['y']
    #     self.u = bokeyuan['u']
    #     self.a = bokeyuan['a']
    #     self.n = bokeyuan['n']
 
    def __init__(self, bokeyuan):
        print("修改前:", self.__dict__)
        self.__dict__.update(bokeyuan)
        print("修改后:", self.__dict__)
 
d = Dict2Obj(bokeyuan)
print(d)
D:\MC\venv\Scripts\python.exe D:/MC/test03.py
修改前: {}
修改后: {'b': 1, 'o': 2, 'k': 3, 'e': 4, 'y': 5, 'u': 6, 'a': 7, 'n': 8}
<__main__.Dict2Obj object at 0x0000019722B78400>
 
Process finished with exit code 0

Python的实例有自己的__dict__属性,它对应的类也有自己的__dict__   (但是有些特殊的对象是没有__dict__属性的,这里不做讨论),,__dict__是一个字典,键是属性名,值为属性值。

上面self实例对象的属性首先是{},更新后变为{'b': 1, 'o': 2, 'k': 3, 'e': 4, 'y': 5, 'u': 6, 'a': 7, 'n': 8}

#首先创建一个类cls,这个类中包含一个值为1的类变量clsvar,一个值为2的实例变量insvar,
class cls:
    clsvar = 1
    def __init__(self):
        self.insvar = 2
 
#创建类的实例ins1和ins2ins1 = cls()
ins2 = cls()
 
print(cls.__dict__) #类的__dict__属性
print(ins1.__dict__) # 实例对象ins1的__dict__属性
 
ins1.clsvar=20
print(cls.clsvar)
print(ins1.clsvar)
print(ins2.clsvar) # ins1实例改变类变量不会影响ins2实例
print(cls.__dict__) #类的__dict__属性
print(ins1.__dict__) # 实例对象ins1的__dict__属性
D:\MC\venv\Scripts\python.exe D:/MC/test03.py
{'__module__': '__main__', 'clsvar': 1, '__init__': <function cls.__init__ at 0x00000156AEC75040>, '__dict__': <attribute '__dict__' of 'cls' objects>, '__weakref__': <attribute '__weakref__' of 'cls' objects>, '__doc__': None}
{'insvar': 2}
1201
{'__module__': '__main__', 'clsvar': 1, '__init__': <function cls.__init__ at 0x00000156AEC75040>, '__dict__': <attribute '__dict__' of 'cls' objects>, '__weakref__': <attribute '__weakref__' of 'cls' objects>, '__doc__': None}
{'insvar': 2, 'clsvar': 20}
 
Process finished with exit code 0

当打印类的__dict__属性时,列出了类cls所包含的属性,包括一些类内置属性和类变量clsvar以及构造方法__init__

而实例变量则包含在实例对象ins1的__dict__属性中,一个对象的属性查找顺序遵循首先查找实例对象自己,然后是类,接着是类的父类。当ins1在自己的__dict__中查找到了clsvar,就不会再向上查找

ins1.clsvar = 20这句只是在实例ins1的__dict__属性中增加了'clsvar': 20这一键值对,而类中的clsvar的值并没有改变,重要的事情说三遍:一个对象的属性查找顺序遵循首先查找实例对象自己,然后是类,接着是类的父类。当ins1在自己的__dict__中查找到了clsvar,就不会再向上查找,所以输出了值20。但是此时,cls类中的clsvar的值仍然为1。

到此这篇关于python中的__dict__属性介绍的文章就介绍到这了,更多相关python dict 属性 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Python中的Dict

    目录 什么是dict? 我们下面看看dict的增删查改 总结 什么是dict? dict全称为dictionary(字典),人如其名,像字典一样可以根据索引定位到特定的文字. 在python的dict中,我们可以通过key来定位到特定的value. 如上图,这就是dict的内部结构.key vs value 这样的配对,key3再次套娃嵌套内部取出来也是一个dict. 如此反复,一个dict可以变得很多层次,但是特征还是key value一一配对,只是value能是普通类型也能是dict. 之前

  • python中dir()与__dict__属性的区别浅析

    前言 只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过__dict__和dir()来显示数据对象的相关属性. __dict__可以看作是数据对象的名称空间,所以只包含自己的属性,且可以直接增.删.改.查__dict__. dir()可以看作是显示属性的包含显示,除了显示自己的还显示继承来的属性. 对于模块 参见:查看模块属性 对于类和对象 以下面的例子解释__dict__和dir()在应用于类和对象上的不同之处. class supcls: def

  • Python字典 dict几种遍历方式

    目录 1.使用 for key in dict遍历字典 2.使用for key in dict.keys () 遍历字典的键 3.使用 for values in dict.values () 遍历字典的值 4.使用 for item in dict.items () 遍历字典的键值对 5.使用 for key,value in dict.items () 遍历字典的键值对 1.使用 for key in dict遍历字典 可以使用for key in dict遍历字典中所有的键 x = {'a

  • python3中dict.keys().sort()用不了的解决方法

    原因是dict.keys()的返回结果不再是一个list了 Python3的keys(), values(), items()返回的都是迭代器,如果需要像Python2一样返回列表,只要传给list就行了: keys = list(mydict.keys()) 如果想要同时获得keys和values,永远应当使用items items = list(mydict.items()) 可以再将得到的元组序列拆成keys和values: keys = [k for k,v in items] valu

  • python--字典(dict)和集合(set)详解

    目录 一.集合 1.集合定义 2.创建集合 3.去重 4.集合增删 5.关系运算 6.排序 7.frozenset 8.练习 9.特性 二.字典 1.字典定义 2.字典打印 3.字典元素删除 4.setdefault 5.defaultdict 总结 一.集合 1.集合定义 集合(set)是一个无序的不重复元素序列. 2.创建集合 使用大括号 { } 或者 set() 函数创建集合; 创建一个空集合必须用 set() 而不是 { } { } 是用来创建一个空字典. s = {1,2,3,4} p

  • 关于Python dict存中文字符dumps()的问题

    Background 之前数据库只区分了Android,IOS两个平台,游戏上线后现在PM想要区分国服,海外服,港台服.这几个字段从前端那里的接口获得,code过程中发现无论如何把中文的value丢到dict中存到数据库中就变成类似这样**"\u56fd\u670d"** Solution 1.首先怀疑数据库编码问题,但看了一下数据库其他字段有中文格式的,所以要先check数据库(MySQL)的字符编码. 可以看到明明就TMD是utf-8啊,所以一定不是数据库层出现的问题,回到代码de

  • Python保存dict字典类型数据到Mysql并自动创建表与列

    字典是另一种可变容器模型,且可存储任意类型对象,主要是工具类, 接下来使用pymysql来创建表与SQL 下面来看看示例代码: import pymysql class UseMysql(object):     def __init__(self, user, passwd, db, host="127.0.0.1", port=3306):         self.db = db         self.conn = pymysql.connect(             h

  • Python 字典(Dictionary)详细介绍

    目录 1.访问字典里的值 2.修改字典 3.删除字典元素 3.1字典键的特性 4.字典内置函数&方法 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 格式如下所示: d = {key1 : value1, key2 : value2 } 注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict. 键一般是唯一的,如果重复最后的一个键值对会替换

  • 详解Python中的Dict 2

    目录 dict 的元素定位(键/值定位)和遍历 dict的复制(拷贝) 总结 学委前面展示dict的概念和增删查改!这次我们把其他函数介绍补充了. dict 的元素定位(键/值定位)和遍历 dict这种对象我们可以通过 keys() 获取所有的键的列表; dict这种对象我们可以通过 values() 获取所有的值的列表. 这样有列表我们可以遍历整个dict对象. 但是更多使用下面的风格: mydict = { 'name': 'leixuewei', 'date': '20211104' }

  • python中的__dict__属性介绍

    将字典转换成对象的小技巧: bokeyuan = {"b": 1,                 "o": 2,                 "k": 3,                 "e": 4,                 "y": 5,                 "u": 6,                 "a": 7,        

  • 解密Python中的描述符(descriptor)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些"中级"的语言特性有着完善的文档,并且易于学习. 但是这里有个例外,那就是描述符.至少对于我来说,描述符是Python语言核心中困扰我时间最长的一个特性.这里有几点原因如下: 1.有关描述符的官方文档相当难懂,而且没有包含优秀的示例告诉你为什么需要编写描述符(我得为Raymond Hettinger辩

  • 介绍Python中几个常用的类方法

    内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对象,在对象被删除之前调用 __new__(cls,*args,**kwd) 实例的生成操作 __str__(self) 在使用print语句时被调用 __getitem__(self,key) 获取序列的索引key对应的值,等价于seq[key] __len__(self) 在调用内联函数len()时被调用 __cmp__(stc,dst) 比较两个对象src和dst __ge

  • Python中动态获取对象的属性和方法的教程

    首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding: UTF-8 import sys # 模块,sys指向这个模块对象 import inspect def foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.

  • Python中的Descriptor描述符学习教程

    Descriptor是什么?简而言之,Descriptor是用来定制访问类或实例的成员的一种协议.额..好吧,一句话是说不清楚的.下面先介绍一下Python中成员变量的定义和使用. 我们知道,在Python中定义类成员和C/C++相比得到的结果具有很大的差别.如下面的定义: class Cclass { int I; void func(); }; Cclass c; 在上面的定义中,C++定义了一个类型,所有该类型的对象都包含有一个成员整数i和函数func:而Python则创建了一个名为Pcl

  • Python中Class类用法实例分析

    本文实例讲述了Python中Class类用法.分享给大家供大家参考,具体如下: 尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦.因此我们关注Python在FP上的优势的同时,还得了解一下Python在OO方面的特性. 要讨论Python的OO特性,了解Python中的Class自然是首当其冲了.在Python中定义class和创建对象实例都很简单,具体代码如下: class GrandPa: def __

  • python中hashlib模块用法示例

    我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 具体应用 #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import h

  • 在Python中定义和使用抽象类的方法

    像java一样python也可以定义一个抽象类. 在讲抽象类之前,先说下抽象方法的实现. 抽象方法是基类中定义的方法,但却没有任何实现.在java中,可以把方法申明成一个接口.而在python中实现一个抽象方法的简单的方法是: class Sheep(object): def get_size(self): raise NotImplementedError 任何从Sheep继承下来的子类必须实现get_size方法.否则就会产生一个错误.但这种实现方法有个缺点.定义的子类只有调用那个方法时才会

  • python中元类用法实例

    本文实例讲述了python中元类用法,分享给大家供大家参考.具体方法分析如下: 1.元类(metaclass)是用来创建类的类 2.type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bases__中,dict的值存到__dict__中 复制代码 代码如下: class X: ... 

  • Python中的类与对象之描述符详解

    描述符(Descriptors)是Python语言中一个深奥但却重要的一部分.它们广泛应用于Python语言的内核,熟练掌握描述符将会为Python程序员的工具箱添加一个额外的技巧.为了给接下来对描述符的讨论做一些铺垫,我将描述一些程序员可能会在日常编程活动中遇到的场景,然后我将解释描述符是什么,以及它们如何为这些场景提供优雅的解决方案.在这篇总结中,我会使用新样式类来指代Python版本. 1.假设一个程序中,我们需要对一个对象属性执行严格的类型检查.然而,Python是一种动态语言,所以并不

随机推荐