본문 바로가기
Python/Python FAQ

Python 객체의 필드로부터 파이썬 딕셔너리, Python dictionary from an object's fields

by 베타코드 2023. 10. 25.
반응형

질문


무작위 객체에서 사전을 만들기 위한 내장 함수가 있는지 알고 계십니까? 다음과 같은 작업을 수행하고 싶습니다:

>>> class Foo:
...     bar = 'hello'
...     baz = 'world'
...
>>> f = Foo()
>>> props(f)
{ 'bar' : 'hello', 'baz' : 'world' }

참고: 메서드는 포함되지 않아야 합니다. 필드만 포함되어야 합니다.


답변


파이썬 2.7에서의 최선의 방법은 new-style 클래스를 사용하는 것입니다 (Python 3에서는 필요하지 않음), 즉,

class Foo(object):
   ...

또한, '객체'와 '클래스' 사이에는 차이가 있습니다. 임의의 객체에서 사전을 구축하기 위해서는 __dict__를 사용하는 것이 충분합니다. 보통 메서드는 클래스 레벨에서 선언하고 속성은 인스턴스 레벨에서 선언하므로 __dict__를 사용하는 것이 좋습니다. 예를 들면:

>>> class A(object):
...   def __init__(self):
...     self.b = 1
...     self.c = 2
...   def do_nothing(self):
...     pass
...
>>> a = A()
>>> a.__dict__
{'c': 2, 'b': 1}

더 나은 접근 방법은 내장된 vars 함수를 사용하는 것입니다 (댓글에서 robert가 제안한 대로):

>>> vars(a)
{'c': 2, 'b': 1}

또는, 하고 싶은 작업에 따라 dict를 상속하는 것도 좋을 수 있습니다. 그러면 클래스 자체가 이미 사전이 되며, 필요한 경우 getattr과/또는 setattr을 오버라이드하여 사전을 호출하고 설정할 수 있습니다. 예를 들면:

class Foo(dict):
    def __init__(self):
        pass
    def __getattr__(self, attr):
        return self[attr]

    # etc...
반응형

댓글