一、__dir__方法
对象的__dir__()方法的作用是列出对象内部所有的属性名和方法名,该方法将会返回包含所有属性或方法名的序列。
如果程序对某个对象执行dir(obj)函数,实际上就是将该对象的__dir__()方法返回值进行排序,然后包装成列表。
栗子如下:
1 #coding=utf-8 2 class Item(): 3 def __init__(self,name,price): 4 self.name=name 5 self.price=price 6 def info(): 7 pass 8 #创建一个Item对象,将之赋值给it变量 9 it = Item('鼠标',29.8) 10 #打印所有属性(包含方法)组成的列表 11 print(it.__dir__()) 12 #打印所有属性(包含方法)组成的列表,已排序 13 print(dir(it))
控制台打印如下:
解释:可以看到程序不仅会输出我们定义的name、price、info三个属性和方法,而且还有大量的系统内置的属性和方法,比如前两篇所说到的__repr__和__del__方法。
二、__dict__属性
__dict__属性用于查看对象内部存储的所有属性名和属性值组成的字典,通常程序直接使用该属性即可。程序使用__dict__属性既可查看对象的所有内部状态,也可以通过字典语法来访问或修改指定属性的值。
栗子如下:
1 #coding=utf-8 2 class Item(): 3 def __init__(self,name,price): 4 self.name=name 5 self.price=price 6 def info(): 7 pass 8 #创建一个Item对象,将之赋值给it变量 9 it = Item('鼠标',29.8) 10 print(it.__dict__) 11 print(it.__dict__['name']) 12 print(it.__dict__['price']) 13 it.__dict__['name'] = '键盘' 14 it.__dict__['price'] = 39.9 15 print(it.name) 16 print(it.price)
控制台打印如下:
解释:代码第10行直接输出对象的__dict__属性,这样将会直接输出该对象内部存储的所有属性名和属性值组成的dict对象;接下来的两行单独打印了这两个属性值;第13、14行通过对__dict__属性对name和price两个属性赋值,然后再次打印就出现了新的属性值。