2017-09-29 10 views
0

を持っていない典型的な入力ではAttributeError: 'に設定' オブジェクトは、私は次のコードを持っている何の属性 'B'

N1 = int(input()) 
a = set(list(map(int, input().split()))) 
N2 = int(input()) 
for i in range(N2): 
    b = input().split() 
    c = set(list(map(int, input().split()))) 
    a.b[0](c) 
print(sum(a)) 

を、リストbは次のようになります。

b = ['intersection_update', '10'] 

問題は何ですかa.b[0](c)?明らかに私はそれを正しく評価していません。

概念はうまく見えますが、実際にはリストの要素である属性を取ることはできません。a

私は評価したいことは次のとおりです。ここで

a.intersection_update(c) 

がエラーだ私が取得:

Traceback (most recent call last): 
    File "solution.py", line 7, in 
    a.b[0](c) 
AttributeError: 'set' object has no attribute 'b' 

答えて

1

Pythonのドット演算子を使用して、そのような間接的な属性アクセスを行うことはできません。代わりにgetattr()を使用してください。

>>> a = {1, 2, 3, 4, 5} 
>>> c = {3, 4, 5, 6, 7} 
>>> b = ['intersection_update', '10'] 
>>> getattr(a, b[0])(c) 
>>> a 
{3, 4, 5} 
+1

ありがとうございました。私は今日何か新しいことを学んだ:) – hky404

1

は、私はあなたが文字列として保存されている名前だ属性を取得するには、getattrを使用したいと思います別の変数:

getattr(a, b[0])(c) 

あなたの現在のコードは、という名前の属性を探していますaのが設定されています。

関連する問題