2017-12-10 13 views
1

関数の引数としての価値:今パイソン - オブジェクトのパラメータと、私はこのように、パラメータの種類を持つオブジェクトの引数異なる種類としてとる汎用関数を作成したい

def func(obj, param, param_values): 
    for param_value in param_values: 
     obj.setParam(param=param_value) 
     # do some stuff 
    end 

私のような、異なるパラメータ名を取る異なるオブジェクトとその関数を呼び出すしたいと思います:

func(obj1(), width, {1,2,3,4}) 
func(obj2(), height, {4,5,6}) 

をしかし、私はこのようにそれを書くとき、私は「paramは」のパラメータではないというエラーを持っていますobj1およびobj2。

「param」の値が「param」という単語ではなく読み込まれるように関数を書く方法はありますか? 同じ問題が発生する可能性があると私は予想しているので、同じ 'param_value'に行く。

答えて

1

setattrを使用してオブジェクトに属性を追加します。例えば

class Foo: 
    def __init__(self): 
     self.a = "hi" 

foo = Foo() 
foo.a # "hi" 

def func(obj, param, param_values): 
    setattr(obj, param, param_values) 

func(foo, "b", [1,2,3]) 

foo.b # [1,2,3] 
+0

ありがとうございました。 – user3548298

+0

よろしくお願いいたします。 –

1

私はあなたがsetattr機能を探していると思います。

例えば:

def func(obj, param, param_values): 
    for param_value in param_values: 
     setattr(obj, param, param_value) 
     # do some stuff 
    end 
0

あなたが**kwargssetattrを対象に可変数の引数を追加することができます。

class Foo: 
    def __init__(self): 
     pass 

def func(obj, **kwargs): 
    for k,v in kwargs.items(): 
     setattr(obj,k,v) 

foo = Foo() 

func(foo, width={1,2,3,4}, height={4,5,6}) 

print("width: {}".format(foo.width)) 
print("height: {}".format(foo.height)) 
関連する問題