반응형
질문
무작위 객체에서 사전을 만들기 위한 내장 함수가 있는지 알고 계십니까? 다음과 같은 작업을 수행하고 싶습니다:
>>> 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...
반응형
댓글