2016-08-29 2 views
0

私は、関連する地震データ(マグニチュード、ヒットした時間など)をクラス変数に保存するEarthquakeというクラスを作成しました。私はクラスをプリントアウトしたい、ユーザーの入力に応じてどのクラス変数が呼び出されているかを変更する方法はありますか?

earthquake1 = Earthquake() 

answer = input("What data would you like to see?") 
print(earthquake1.answer) 

上記の例では、ユーザーがmagnitudeに答える場合:私は、そうのような彼らのためにそのデータをプリントアウト、彼らが見てみたいと思いますどのデータをユーザーにお願いしたいと思います変数earthquake1.magnitude

これを実行する方法はありますか?

+0

if文? https://docs.python.org/3/tutorial/controlflow.html – dfasoro

+1

おそらく 'getattr' ...' eval'でも簡単に実行できますが、 'eval'は悪です –

+0

@das私はむしろif文を使用しません。私は20以上の属性を持っています – Ash

答えて

4

だけgetattrを使用します。

earthquake1 = Earthquake() 

answer = input("What data would you like to see?") 
print(getattr(earthquake1, answer)) 
2

getattrearthquake.attr_nameに相当します。違いは、getattrは変数を使用して名前にアクセスし、見つからない場合はデフォルト値を指定できることです。要するに

print(getattr(earthquake1, answer)) 

それとも、あなたがKeyErrorを上げるのではなく、デフォルト値を使用する必要がある場合:

print(getattr(earthquake1, answer, "Instance variable {} not found".format(answer))) 
関連する問題