定义一个类将它实例化,我们可以通过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. 条件运算符?:接受三个操作数,是C#中唯一的三元运算符(转)

    int i = 10; int j = i == 10 ? 1 : 2; //转换成if选择结果如下 if (i == 10) { j = 1; } else { j = 2; } 需要根据还可以嵌套 ...

  2. jquery offsetParent()源码解读

    offsetParent: function() { return this.map(function() { var offsetParent = this.offsetParent || docE ...

  3. js实现对象或者数组深拷贝

    今天遇到个问题,就是vue绑定的数组在push中所有的数组都会跟着改变.这个主要是因为 JavaScript中对象或者数组等引用类型,直接拷贝,改变一个另外一个也会改变: 有个简单的方法就是先转换为字 ...

  4. 一个页面有相同ID元素的情况分析

    经常会遇到一个页面中有相同定义相同id的情况,从道理上来说,id应该是这个页面中某个元素的唯一标识,所以不应该出现有相同id的情况,否则会产生意想不到的结果.而且各个浏览器的表现也是不一样的.我只做了 ...

  5. js 学习网站

    1.  Mozilla Developer Network(MDN) 这里你可以找到官方的完整的javascript参考,还有许多有用的指导,教程以及文章,从基本javascript使用到最佳实践以及 ...

  6. 【C#】.net 导出Excel功能

    将DataSet对象导出成Excel文档 一.不带格式控制 void btnExport_Click(object sender, EventArgs e) { IList<string> ...

  7. 什么是OOA/OOD

    Object Oriented Analyzing Object Oriented Design Object Oriented Programming ooa(object oriented ana ...

  8. 装饰者模式--Java篇

    装饰者模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活. 1.定义接口,可以动态的给对象添加职责. package com.lujie; p ...

  9. Easyui combobox如何默认选中第一项???

    以下代码可以实现combobox默认选中第一项,在实际开发中我们可能会用到! // 处理combobox默认选中的问题 <input id="user_type" class ...

  10. Nengo 神经网络

    Nengo被加拿大滑铁卢大学的神经学家和软件工程师表示,这是迄今为止产生的世界上最复杂.最大规模的人类大脑模型模拟.这个名叫Spaun的大脑由250万 个模拟神经元组成,它能执行8种不同类型的任务.这 ...