张芷铭的个人博客

vars() 返回对象的属性字典(__dict__),无参数时等价于 locals()

语法

1
vars([object])
  • 有参数:返回 object.__dict__
  • 无参数:返回当前作用域局部变量字典

使用场景

获取实例属性

1
2
3
4
5
6
7
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("Alice", 25)
vars(p)  # {'name': 'Alice', 'age': 25}

修改属性

1
vars(p)["age"] = 26  # 同步修改 p.age

获取模块属性

1
2
import math
vars(math)  # {'pi': 3.14..., 'sqrt': <function>, ...}

获取局部变量

1
2
3
4
5
def test():
    a, b = 10, "hello"
    vars()  # {'a': 10, 'b': 'hello'}

# 等价于 locals()

vars() vs dir()

函数返回值
vars()属性-值字典
dir()属性名列表
1
2
vars(p)  # {'name': 'Alice'}
dir(p)   # ['__class__', 'name', ...]

注意

  1. 并非所有对象都有 __dict__intstr 等内置类型会报 TypeError
  2. 局部变量字典只读:修改 vars() 返回的字典不影响实际局部变量
  3. 只读 __dict__:部分对象的属性字典不可修改

Comments