2017-05-09 15 views
0

私は過去にこの問題を抱えていましたが、解決策は見つかりませんでした。私はトンのGoogleリンクをチェックして、まだ知らない。 私がしたいことは、文字列を変数として使用することです。私はSQLAlchemyので働いてまっすぐ私のプロジェクトからの例を使用します。(関数内の変数「目的」を探してください)文字列を変数またはオブジェクトに変換する、Python

はここに例を示します

def win_ratio_p_obj(objective): 
    #want to find the win/loss ratio for each obj_first, ie. 60% of times when team gets fblood you also win vs. 40% of time you lose 
    obj_totals = session.query(Match.win, func.count(Match.win)).filter(Match.**objective** == 't').group_by(Match.win).order_by(Match.win).all() 
    win_chance = obj_totals[1][1]/(obj_totals[0][1]+obj_totals[1][1]) 
    return win_chance 

objective = 'first_dragon'  
x = win_ratio_p_obj(objective) 
objective = 'first_blood' 
y = win_ratio_p_obj(objective) 
objective = 'first_turret' 
z = win_ratio_p_obj(objective) 
objective = 'first_inhib'  

戻り値:

Traceback (most recent call last): 
    Python Shell, prompt 15, line 1 
builtins.AttributeError: type object 'Match' has no attribute 'objective' 

私がしたいことは、コードの繰り返しを減らすことを目的として、それぞれの目的を変数名として使用することです。私は非常に簡単にいくつかの機能を貼り付けてコピーすることができることを知っているが、それはばかげているようだ。 現時点では、上記のコードは目的変数の値を文字列ではなく変数として認識しません。

すべての回答は非常に高く評価されます!

+0

'GETATTR(マッチ、客観)'。 –

答えて

1

あなたがgetattrを使用することができますように思える:

getattr(Match, objective) 
+0

ありがとう! SOコミュニティを大好き! –

関連する問題