[解決済み] クラスインスタンスのプロパティを辞書から作成する?
質問
CSVからインポートしていますが、おおよそ次のようなフォーマットでデータを取得しています。
{ 'Field1' : 3000, 'Field2' : 6000, 'RandomField' : 5000 }
フィールドの名前は動的です。(まあ、Field1 と Field2 以外にもあるかもしれないという意味で動的なのですが、私が知っているのは
Field1
と
Field2
は常に存在することになります。
この辞書をクラスに渡せるようにしたいのですが
allMyFields
に渡して、上記のデータをプロパティとしてアクセスできるようにしたいです。
class allMyFields:
# I think I need to include these to allow hinting in Komodo. I think.
self.Field1 = None
self.Field2 = None
def __init__(self,dictionary):
for k,v in dictionary.items():
self.k = v
#of course, this doesn't work. I've ended up doing this instead
#self.data[k] = v
#but it's not the way I want to access the data.
q = { 'Field1' : 3000, 'Field2' : 6000, 'RandomField' : 5000 }
instance = allMyFields(q)
# Ideally I could do this.
print q.Field1
何か提案はありますか?理由としては -- コードヒンティングを利用できるようにしたいのと、データを辞書にインポートして
data
という辞書にデータをインポートしても、そのようなことはできません。
(変数名は実行時まで解決されないので、私はまだKomodoに骨を折る必要がありそうです。
self.Field1 = None
で十分だと思います)。
それで - 私がしたいことはどうすればいいのでしょうか?それとも、私は設計の悪い、非Pythonの木に吠えているのでしょうか?
どのように解決するのですか?
あなたは
setattr
(を使うことができます(ただし、すべての文字列が有効な属性名とは限りませんので、注意してください!)。
>>> class AllMyFields:
... def __init__(self, dictionary):
... for k, v in dictionary.items():
... setattr(self, k, v)
...
>>> o = AllMyFields({'a': 1, 'b': 2})
>>> o.a
1
編集します。 上記のコードと SilentGhostの回答 . 上のコードは インスタンス属性 が与えられた辞書に基づいているクラスを作成します。SilentGhost のコードでは、クラスが作成され、そのクラスの クラス属性 は与えられた辞書に基づいています。
あなたの特定の状況に応じて、これらのソリューションのいずれかがより適切であるかもしれません。1 つまたは複数のクラス インスタンスを作成することが必要ですか? 答えが 1 つの場合、オブジェクトの作成を完全にスキップして、型のみを構築することもできます (したがって SilentGhost の答えに従います)。
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン