Pythonで単純なクラスを取得したとしましょう
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( "one"、 "two"、 "three"、6)>>> int(w)9006
これは素晴らしいです!しかし、今度は同様の方法でそれをdictにキャストしたいと思います
>>> w = Wharrgarbl( "one"、 "two"、 "three"、6)>>> dict(w){"a": "one"、 "c": "three"、 "b": "two"}
これを機能させるには何を定義する必要がありますか? __ what_goes_here __
を__dict __
とdict
の両方に置き換えてみましたが、 dict(w)
の結果がTypeErrorになりました:どちらの場合も、Wharrgarblオブジェクトは反復可能ではありません
。クラスを単純に反復可能にするだけで問題が解決するとは思いません。また、「python cast object to dict」というさまざまな表現を考えられる限り多くのグーグルで試しましたが、関連するものは見つかりませんでした:{
また! w .__ dict __
を呼び出すと、 w.version
とw.sum
が含まれるため、私が望むことを実行できないことに注意してください。 def int(self)
を使用してint
にキャストをカスタマイズするのと同じ方法で、 dict
にキャストをカスタマイズしたいと思います。
私はこのようなことができることを知っています
>>> w .__ what_goes_here __(){"a": "one"、 "c": "three"、 "b": "two"}
しかし、私はpythonicな方法があると仮定しています int(w)
またはstr(w)
と同じタイプのものであるため、 dict(w)
を機能させるため。もっとPythonの方法がない場合は、それでも問題ありません。私が尋ねると思います。ああ、これはPython 2.7の場合ですが、2.4の古くて破壊されたソリューションの場合もスーパーボーナスポイントです。
別の質問があります __ dict __
のすべてがdict()
によって返される辞書に含まれることを望まない。パブリック変数とプライベート変数のようなもので、私が探しているものを説明するのに十分かもしれません。オブジェクトには、計算で使用されるいくつかの値が格納されるため、結果の辞書に表示する必要はありません。
更新:asdict<を使用することを選択しました。 / code>ルートが提案されましたが、質問に対する答えになりたいものを選択するのは難しい選択でした。 @RickTeacheyと@jpmc26の両方が私が取り組む答えを提供しましたが、前者はより多くの情報とオプションを持っていて、同じ結果に到達し、より多くの賛成を得たので、私はそれに賛成しました。ヘルプ。私はスタックオーバーフローに長く懸命に潜んでいて、つま先をもっと水中に入れようとしています。