2016-06-20 17 views
0

関数の引数として変更したい変数を設定するにはどうすればよいですか?私は何dictの使用について一つだけの関数を定義し、ないset_a(値)、set_b(値)、set_c(値)、...変数の名前を変数として渡す方法

class MyVarClass: 
    def __init__(self): 
     self.a = 1 
     self.b = 2 
     self.c = 3 

# this works, but I don't want to write n functions 
def set_a(myvar_object, value): 
    myvar_object.a = value 

# this is what I actually want: 
def set_vars(myvar_object, var_name, value): 
    myvar_object.var_name = value 

myvar = MyVarClass() 
# I want to do the same as myvar.a = 4 
set_a(myvar, 4) # works as intended, now myvar.a is 4 
set_vars(myvar, a, 4) # error, a is not defined 
+3

['setattr(obj、name、value)'](https://docs.python.org/3/library/functions.html#setattr)。 –

答えて

5

は、このようなクラスにメソッドを作成することです:

class MyVarClass: 
    def __init__(self): 
     self.a = 1 
     self.b = 2 
     self.c = 3 

    def set_a(self, value): 
     self.a = value 

何らかの理由で、このようにそれを行うと、あなただけの文字列として属性の名前を持つことができない、場合

setattr(myvar_object, 'a', value) 

しかし、通常、あなたが何がちょうどこの行です:

myvar_object.a = 4 
+0

setattr()は私が探していたもののように見えます。 – marco

0

たい:

class MyVarClass: 
    def __init__(self): 
     self.vars = {"a": 1, "b": 2, "c": 3} 

def set_vars(myvar_object, var_name, value): 
    myvar_object.vars[var_name] = value 
+0

私は再び言葉を見なければなりません。私はまだそれらに精通していないし、それを動作させた変数と混同しています。 – marco

1

これは、 setattrでやりました。

def set_vars(myvar_object, var_name, value): 
    setattr(myvar_object, var_name, value) 

これは必ずしもこれを行う最善の方法ではありません。それはしばしば、異なるデータ構造が良いかもしれないことを示唆しますが、ここではそうでない場合があります。

あなたがこのルートに行くと、setattrを直接呼び出すのではなく、defを持つ理由があまりないことに注意してください。あなたは通常、何

0
** 

var_name = '' 
class MyVarClass: 
    def __init__(self): 
     self.a = 1 
     self.b = 2 
     self.c = 3 

# this is what I actually want: 
def set_vars(myvar, var_name, value): 
    myvar.var_name = value 
    print (myvar.var_name) 

myvar = MyVarClass() 

set_vars(myvar, "b", 6) 

** 
、あなたはSETATTRを使用することができます
+0

>>> >>> MYVAR .__ dict__に { 'C':3、 'B':2 'VAR_NAME':6 'A':1} 2 myvar.b >>> myvar.var_name 6 私はほしいものではありません – marco

+0

あなたが欲しいもの –

関連する問題