鱼C论坛

 找回密码
 立即注册
查看: 2800|回复: 4

[已解决]关于字典类拓展的一个问题

[复制链接]
发表于 2018-10-17 18:47:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class AttrDict(dict):
    """Dict that can get attribute by dot"""
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

这里  self.__dict__ = self是什么意思?
可实现字典拓展功能
a = AttrDict(x=1, xx=11, xxx=111, xxxx=1111)
print(a)          -------> {'x': 1, 'xx': 11, 'xxx': 111, 'xxxx': 1111}
print(a.x)       -------> 1
print(a.xx)     -------> 11
print(a.xxx)    -------> 111
print(a.xxxx)  -------> 1111

求大神指导,万分感谢
最佳答案
2018-10-18 00:59:16
给你说一下这个类语句的大概意思吧
就是在初始化类的时候,把类和实例以及一对参数传给父类(就是python里面的字典)绑定一个父类对象,
源码里面是这样写的,用的是红色框里面的用法
QQ截图20181018004031.png
所以基本就没干啥事,都是python源代码给你搞的,然后就用了 self.__dict__方法  什么意思呢,就是
__dict__方法是用来显示类里面的属性的(函数也是类的一种属性)
为了让你更直观的知道里面发生了什么,我又加了几句新的代码
QQ截图20181018004413.png
可以看到,一开是你创建了一个字典对象        就和你用  dict(x=1, xx=11, xxx=111, xxxx=1111) 是一样一样的  然后把这个字典对象赋值给self
这时候self是个字典,但是如果你在外面idle直接运行,你会发现,字典是没有__dict__方法的,这时候类的作用就体现出来了,给你提供了个__dict__方法的接口,让你能使用__dict__
self.__dict__   是个空的字典对象,然后你把  创建的self这个字典赋值给了 self.__dict__
而self.__dict__  实际上是指你实例的所有属性  于是你就可以用属性的方法来调用传进去的参数

这个方法很巧妙,还是很不错的!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-17 19:03:20 | 显示全部楼层
把字典本身作为自己的属性集合,
你就可以用点来访问了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-18 00:59:16 | 显示全部楼层    本楼为最佳答案   
给你说一下这个类语句的大概意思吧
就是在初始化类的时候,把类和实例以及一对参数传给父类(就是python里面的字典)绑定一个父类对象,
源码里面是这样写的,用的是红色框里面的用法
QQ截图20181018004031.png
所以基本就没干啥事,都是python源代码给你搞的,然后就用了 self.__dict__方法  什么意思呢,就是
__dict__方法是用来显示类里面的属性的(函数也是类的一种属性)
为了让你更直观的知道里面发生了什么,我又加了几句新的代码
QQ截图20181018004413.png
可以看到,一开是你创建了一个字典对象        就和你用  dict(x=1, xx=11, xxx=111, xxxx=1111) 是一样一样的  然后把这个字典对象赋值给self
这时候self是个字典,但是如果你在外面idle直接运行,你会发现,字典是没有__dict__方法的,这时候类的作用就体现出来了,给你提供了个__dict__方法的接口,让你能使用__dict__
self.__dict__   是个空的字典对象,然后你把  创建的self这个字典赋值给了 self.__dict__
而self.__dict__  实际上是指你实例的所有属性  于是你就可以用属性的方法来调用传进去的参数

这个方法很巧妙,还是很不错的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-18 14:29:48 | 显示全部楼层
RIXO 发表于 2018-10-18 00:59
给你说一下这个类语句的大概意思吧
就是在初始化类的时候,把类和实例以及一对参数传给父类(就是python里 ...

多谢,明白了,开始还是对__dict__属性不太熟悉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-13 20:47:31 | 显示全部楼层
厉害啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表