定义一个类将它实例化,我们可以通过obj.属性来访问类的属性,如果想获取类的所有实例变量,我们可以使用obj.__dict__来访问,如下:

class A:
def __init__(self):
self.a = 1
self.b = 2 a = A()
print(a.__dict__)
# {'a': 1, 'b': 2}
#获取变量a:
print(a.__dict__['a'])
# 1

如果我们想直接通过字典的方式访问类,obj=A(),dict(obj)直接拿到类的所有实例变量,可以通过如下方式:

class A:
def __init__(self):
self.a = 1
self.b = 2 def keys(self):
return ('a','b',) def __getitem__(self, item):
return getattr(self, item) a = A()
print(dict(a))
#输出:{'a': 1, 'b': 2}

可以看到,通过定义keys方法能够限制类的实例变量的输出,用内置的dict方法就能把类转换成一个普通的字典了

Python把类当做字典来访问的更多相关文章

  1. python七类之字典详解

    一.字典 一.关键字:dict 1.字典是唯一的键值对数据,其表现形式:   dic  =  {键:值},​字典里的键必须保证是唯一的 2.键必须是不可变的数据类型: ​a.故列表是不能当键的 b.所 ...

  2. Python的类实例属性访问规则

    一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里,我们需要明白以下几个地方: 1.Pytho ...

  3. Python面向对象编程 -- 类和实例、访问限制

    面向对象编程 Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...

  4. Python中xml、字典、json、类四种数据的转换

    最近学python,觉得python很强很大很强大,写一个学习随笔,当作留念注:xml.字典.json.类四种数据的转换,从左到右依次转换,即xml要转换为类时,先将xml转换为字典,再将字典转换为j ...

  5. python 私有和保护成员变量如何实现?—— "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量;" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  6. python 2 类与对象

    1.类与对象的概念 类即类别.种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 那么问题来了,先有的一个个具体存在的对象(比如一 ...

  7. Python面向对象 | 类属性

    property property是一个装饰器函数,可以将一个方法伪装成属性,调用的时候可以不用加().@property被装饰的方法,是不能传参数的,因为它伪装成属性了. 装饰器的使用:在要装饰的函 ...

  8. 从C#到Python —— 4 类及面向对象

    http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...

  9. Python的类的下划线命名的区别

    首先,单下划线开头,这个常被用于模块中,在一个模块中以单下划线开头的变量和函数被默认当做内部函数,如果使用from  module  import  *导入时,这部分变量和函数不会被导入.注意,如果使 ...

随机推荐

  1. [软件工程基础]2017.10.27 第二次 Scrum 会议

    决议 周六前项目交接 Milestone 完成 周六集体开发 游心整理物理网站上的实验流程和绪论复习题 石奇川上线静态版实验流程和绪论复习题库 李煦通构思后端如何实现绪论题库,包括和用户记录的关联方式 ...

  2. Day1课后作业:用户登录简单版

    user = "gaojun"password ="123abc"for i in range(3): user = input('请输入用户名:') pass ...

  3. 使用 MiniProfiler 来分析 ASP.NET Core 应用

    MiniProfiler(https://miniprofiler.com/)是一个轻量级且简单易用的分析工具库,它可以用来分析ASP.NET Core应用. 优点 针对ASP.NET Core MV ...

  4. D. Kay and Snowflake 树的重心

    http://codeforces.com/contest/686/problem/D 给出q个询问,每次要求询问以x为根的子树中,哪一个点是重心. 树的重心:求以cur为根的子树的重心,就是要找一个 ...

  5. C. Anton and Making Potions 贪心 + 二分

    http://codeforces.com/contest/734/problem/C 因为有两种操作,那么可以这样考虑, 1.都不执行,就是开始的答案是n * x 2.先执行第一个操作,然后就会得到 ...

  6. centos7安装文档

    1.当载入安装镜像时,我们会看到如下图中的画面,我们选择第一项,安装centos7 2.选择英语(个人测试环境可以使用中文安装) 3.选择network&hostname配置网络 4.在配置网 ...

  7. ACM学习大纲(转)

    1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...

  8. Redis的发布和订阅

    Redis的发布和订阅 Redis发布订阅(pub/sub)是一种消息通信模式,pub发布消息,sub接收消息.(pub/sub)是一种生产者消费者模式,是实现消息队列的一种方式 redis的订阅和发 ...

  9. TreeView显示数据

    1.添加默认节点 private void Form1_Load(object sender, EventArgs e) { TreeNode tn = new TreeNode("默认节点 ...

  10. Symbol.iterator 和 for of

    Symbol.iterator 和 for of 是es6的新特性 可以为对象设置 自己的迭代器 首先介绍我们的for of var arr = [1,2,3,8,33] for (var i of ...