Python에서 객체의 모든 속성 확인 방법
Python에서 vars
함수와 dir
함수를 사용해서 객체의 모든 속성 확인하는 방법
vars 함수¶
객체의 __dict__
속성을 반환한다.
class MyClass:
def __init__(self, a, b) -> None:
self.a = a
self.b = b
mc = MyClass(1, 2)
print(vars(mc))
print(mc.__dict__)
Note
__dict__
속성은 Python에서 클래스의 싱글턴 객체인 object
클래스에서 정의되어 상속된다.
dir 함수¶
인자가 없을 경우 현재 scope가 갖고 있는 속성의 전체 리스트를 반환하고, 인자가 있을 경우 해당 객체의 유효한 속성을 반환한다.
class MyClass:
def __init__(self, a, b) -> None:
self.a = a
self.b = b
mc = MyClass(1, 2)
print(dir(MyClass))
print(dir(mc))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b']
생성된 mc
객체의 경우 'a', 'b'
요소가 포함되어 출력되는 것을 확인할 수 있다.
객체에 매직 메서드 __dir__
이 정의되어 있을 경우 해당 메서드를 호출한다.
class MyClass:
def __init__(self, a, b) -> None:
self.a = a
self.b = b
def __dir__(self): # (1)!
return [self.a, self.b]
mc = MyClass(1, 2)
print(dir(mc))
__dir__
메서드는object
클래스에서 반드시Iterable
을 반환하도록 되어 있으며, 공식 문서에서 모든 속성을 반환하도록 규정되어 있다.