안녕하세요. 이번 시간에는 python의 setattr에 대해 간단하게 알아보겠습니다.

 


 먼저 A 클래스는, __init__ 함수가 호출되면, a, b, c에 각각 0을 넣습니다. 다음에, 객체를 표현하는 __repr__은 a=a의 값, b=b의 값, c=c의 값 형태로 출력해 줍니다.

 

 

 객체 a를 생성하고, a와 b와 c에 각각 1을 넣어보겠습니다. 그 다음에 a를 출력해 보겠습니다.

 

 

 그러면 a=1, b=1, c=1이 나옵니다. 그런데, 속성 값이 100개쯤 있고, 딕셔너리에도 속성 값이 100개쯤 있는데 일일히 a.a = 1, a.b = 1 이런 식으로 넣기는 코드가 너무 길어질 겁니다.

 

 


 setattr 함수를 알아보겠습니다.

 

 setattr(x, 'y', v)는 x.y = v와 같다고 되어 있습니다. 즉, 객체 x의 y라는 속성에 v라는 값을 넣는 것입니다. 되게 간단한 거 같습니다? 그러면, 한 번 이용해 봅시다.

 

 객체 하나를 생성합니다. 다음에, setattr(a, "a", 2)로 a.a = 2와 같은 효과를 냅니다. 다음에, a.b = 2, a.c = 3을 수행합니다.

 

 

 결과는 어떻게 나올까요? a=2, b=1, c=1과 같이 나오게 됩니다.

 

 

 이를 이용해서, 딕셔너리 등에 있는 속성들을 죄다 객체에 넣을 수도 있습니다. 딕셔너리에서 items는 순회를 하면 k, v 쌍으로 돌려주게 됩니다. 이를 이용해서 딕셔너리에서 순회를 하면서 setattr을 사용하면 되겠습니다. 아래 코드를 봅시다.

 

 

 11번째 줄에 k와 v 쌍은 ("a", 2), ("b", 3), ("c", 1) 순서로 들어와요. 결국 for loop를 돌면서 a.a = 2, a.b = 3, a.c = 1이 수행되는 것과 같습니다. 따라서, 12번째 줄 print 문을 수행하면 아래와 같이 출력됩니다.

 

 

 a=2, b=3, c=1. 잘 나왔습니다.