2017-05-12 10 views
0

私は本当にここにいます。私はラッパーに引数を渡す必要があります。これらの引数は実行時に変更されます。どのようにこれはクラスのラッパーを使用して解決することができる任意のアイデア? Python 2:実行時に評価された引数を持つラッパー

def wrapper(x=None): 
 
    def decorate(cls): 
 
     def fct(self): 
 
      print('wrapper argument is: %s' % x) 
 
     cls.fct = fct 
 
     return cls 
 
    return decorate 
 

 
a = 'first' 
 

 

 
@wrapper(x=a) 
 
class Test(): 
 
    pass 
 

 
test = Test() 
 
test.fct() # Prints: first 
 

 
a = 'second' 
 
test.fct() # Prints: first (instead of second)

+0

ここでは良い答えです:http://stackoverflow.com/a/15148557/1647656 –

+0

あなたの答えをありがとう。私はまだ理解していません - リストのような可変オブジェクトを渡しても動作しません(a = ['first'] @wrapper(x = a)、...)。この問題を解決するにはどうすればいいですか? – Croneter

答えて

0

私はここにあなたがそれを行うだろう方法です、コメント内のコードを置くことができません。

def wrapper(x=None): 
    def decorate(cls): 
     def fct(self): 
      print('wrapper argument is: %s' % x[0]) 
     cls.fct = fct 
     return cls 
    return decorate 

a = ['first'] 


@wrapper(x=a) 
class Test(): 
    pass 

test = Test() 
test.fct() # Prints: first 

a[0] = 'second' 
test.fct() # Prints: second 

キーは文字列が不変であり、リストは変更可能であるということです。文字列を渡すと基本的にコピーされます。リストを渡すと、元のリストへの参照が渡されます。元のリスト自体は変更可能です。

+0

私は今それを得る - 非常にありがとう! :-) – Croneter

関連する問題