Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm vars() trong Python - Truy cập __dict__


vars(obj) trả về __dict__ attribute của object (dictionary chứa các attribute instance/class). Gọi không tham số → tương đương locals().

Cú pháp

vars(object) -> dict
vars() -> dict (local symbol table)

Ví dụ 1: Instance object

class Test:
    def __init__(self, a=555, b=787):
        self.a = a
        self.b = b

obj = Test()
print(vars(obj))  # {'a': 555, 'b': 787}

Ví dụ 2: Class object

class Sample:
    company = "Tutorial's Point"
    Number = 4
    Topic = "Python 3.x."

print(vars(Sample))
# {'__module__': '__main__', '__doc__': None, 'company': ..., 'Number': 4, 'Topic': ..., '__dict__': ..., '__weakref__': ...}

Ví dụ 3: Không tham số (locals)

class Test:
    def __repr__(self):
        return "Tutorial's point"
    def local_vars(self):
        number = 4
        return vars()  # hoặc locals()

obj = Test()
print(obj.local_vars())  # {'self': obj, 'number': 4}

Lưu ý & Exception

  • Object phải có __dict__ (instance của user class, module, class).
  • Built-in types (int, str, list...) không có __dict__ → TypeError.
  • __slots__ class → không có __dict__ → TypeError.
vars(123)      # TypeError
vars("abc")    # TypeError
vars([1,2])    # TypeError

vars() vs locals() vs globals()

HàmTrả vềPhạm vi
vars(obj)obj.__dict__Object cụ thể
vars()locals()Local scope hiện tại
locals()Local symbol table (copy)Local scope
globals()Global symbol tableModule scope

Kết luận

vars() tiện để introspect object, debug, serialize. Nhớ bắt TypeError cho built-in types.