0.偶然间看到一个奇怪的现象
>>> x = 1
>>> a = var()
>>> a['x']
1
这是啥操作??用help(vars)
之后,我才知道......
>>> help(vars)
Help on built-in function vars in module builtins:
vars(...)
vars([object]) -> dictionary
Without arguments, equivalent to locals().
With an argument, equivalent to object.__dict__.
如果,没传入参数就将相当于locals()
,嗨,我还以为什么语法糖呢......
不知道locals()
的老铁们,可以先自己试一试,之后会写
1.vars()
走起
vars()
函数返回参数对象object的属性和属性值的字典对象
实际上调用了对象内部定义的__dict__
属性
可以试试:
>>> vars(1)
TypeError: vars() argument must have __dict__ attribute
由于1
这个对象没有__dict__
属性,所以报错
当然,如果参数为空则相当于调用locals()
函数
我们做个试验:
class xx:
def __init__(self):
self.__dict__ = {'':'我是变量__dict__'}
接下来调用此类:
>>> a = xx()
>>> vars(a)
{'': '我是变量__dict__'}
没错吧,返回的是该对象的__dict__
属性
简单说一下__dict__
:
类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类的__dict__
里
一些内置的数据类型是没有__dict__
属性的(可以尝试下vars('我没有__dict__属性')
这个语句)
2.总结
-
vars()
在没有传入参数的时候,相当于调用locals()
- 若传入自定义类的对象,则返回对象的
__dict__
属性,大多数自定义类会隐式创建__dict__
属性 - 若传入一些内置的数据类型,则由于其没有
__dict__
属性,会报错:TypeError: vars() argument must have __dict__ attribute
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。