파이썬에서 클래스 객체를 dict로 캐스팅하는 방법

| | | | | | |

파이썬에 간단한 클래스가 있다고 가정해 보겠습니다.

class Wharrgarbl(object): def __init__(self, a, b, c, sum, version="old" ): self.a = a self.b = b self.c = c self.sum = 6 self.version = version def __int__(self): return self.sum + 9000 def __what_goes_here__(self): return {"a" : self.a, "b": self.b, "c": self.c} 

매우 쉽게 정수로 변환할 수 있습니다.

>>> w = Wharrgarbl("하나", "둘", "셋", 6) >>> int(w) 9006 

훌륭합니다! 하지만 이제 비슷한 방식으로 dict에 캐스팅하고 싶습니다.

>>> w = Wharrgarbl("하나", "둘", "셋", 6) >>> dict(w) {"a": "one", "c": "three", "b": "two"} 

이것이 작동하려면 무엇을 정의해야 하나요? ? __what_goes_here____dict__dict로 대체하려고 시도했지만 dict(w)에서 TypeError가 발생했습니다. : Wharrgarbl 개체는 두 경우 모두 반복할 수 없습니다. 단순히 클래스를 반복 가능하게 만드는 것만으로는 문제가 해결될 것이라고 생각하지 않습니다. 또한 "python cast object to dict"라는 다양한 표현으로 많은 Google 검색을 시도했지만 관련성을 찾을 수 없었습니다.{

역시! w.__dict__를 호출하면 w.versionw.sum이 포함되기 때문에 원하는 작업이 "수행되지 않습니다." def int(self)를 사용하여 int로 캐스트를 사용자 정의할 수 있는 것과 같은 방식으로 dict로 캐스트를 사용자 정의하고 싶습니다.

다음과 같이 할 수 있다는 것을 알고 있습니다.

>>> w.__what_goes_here__() {"a": "one", "c": "three", "b": "two"} 

하지만 파이썬적인 방법이 있다고 가정합니다 int(w) 또는 str(w)와 같은 유형이므로 dict(w)가 작동하도록 합니다. 더 파이썬적인 방법이 있다면 그것도 괜찮습니다. 그냥 제가 질문한 것이라고 생각했습니다. 오! 중요하기 때문에 이것은 파이썬 2.7을 위한 것이지만 2.4 오래된 솔루션에 대한 슈퍼 보너스 포인트이기도 합니다.

또 다른 질문이 있습니다. 파이썬 클래스에서 __dict__() 오버로딩 그것은 이것과 비슷하지만 이것이 중복되지 않는 것을 보증할 만큼 충분히 다를 수 있습니다. 나는 OP가 그의 클래스 객체의 모든 데이터를 딕셔너리로 캐스팅하는 방법을 묻고 있다고 믿습니다. 저는 그 점에서 보다 맞춤형 접근 방식을 찾고 있습니다 dict()에 의해 반환된 사전에 포함된 __dict__의 모든 것을 원하지 않습니다. public 대 private 변수와 같은 것이 내가 찾고 있는 것을 설명하기에 충분할 수 있습니다. 개체는 계산에 사용되는 일부 값을 저장하고 결과 사전에 표시할 필요가 없습니다.

업데이트: asdict<를 사용하기로 선택했습니다. /code> 경로가 제안되었지만 질문에 대한 답변을 원하는 것을 선택하는 것은 어려운 선택이었습니다. @RickTeachey와 @jpmc26 둘 다 내가 롤링할 답변을 제공했지만 전자는 더 많은 정보와 옵션을 가지고 있었고 동일한 결과에 도달했고 더 많은 찬성을 얻었으므로 나는 그것을 갔습니다. 도와주세요. 저는 stackoverflow에 오랫동안 열심히 숨어 있었고 발가락을 물에 더 많이 담그려고 노력하고 있습니다.