描述

vars() 函数返回对象object的属性和属性值的字典对象。

语法

vars() 函数语法:

1
vars([object])

参数

  • object – 对象

返回值

返回对象object的属性和属性值的字典对象,如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()。

实例

以下实例展示了 vars() 的使用方法:

1
2
3
4
5
6
7
8
9
10
>>>print(vars())
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> class Runoob:
... a = 1
...
>>> print(vars(Runoob))
{'a': 1, '__module__': '__main__', '__doc__': None}
>>> runoob = Runoob()
>>> print(vars(runoob))
{}

vars 的一个用法是动态生成类成员。

1
2
3
4
5
6
7
8
9
10
11
12
# 来自 Python 官方文档 enum 模块的例子
from datetime import timedelta
from enum import Enum
class Period(timedelta, Enum):
"different lengths of time"
_ignore_ = 'Period i'
Period = vars()
for i in range(367):
Period['day_%d' % i] = i

print(Period.day_5.value)
# 5 days, 0:00:00

这里的 vars 表示的是类定义内部的局部作用域,相当于分别执行下面这些代码:

1
2
3
4
5
6
class Period(timedelta, Enum):
"different lengths of time"
day_1 = timedelta(1)
day_2 = timedelta(2)
...
day_366 = timedelta(366)

由于类定义内部是单独的作用域,因此用 globals 或者 locals 达不到相同的效果,而在类定义中,因为类名称还不可用,因此也无法用 setattr 实现。