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àm | Trả 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 table | Module scope |
Kết luận
vars() tiện để introspect object, debug, serialize. Nhớ bắt TypeError cho built-in types.