class C:
a = 10
def __init__(self):
self.b = 20
if __name__=="__main__":
c1 = C()
c2 = C()
print(c1.a, c1.b)
print(c2.a, c2.b)
c1.a += 10
c2.b += 10
print(c1.a, c1.b)
print(c2.a, c2.b)
print(C.a)
출력:
10 20
10 20
20 20
10 30
10
a는 클래스 변수이고 b는 인스턴스 변수이다.
클래스 변수를 읽을 때 클래스이름.변수이름
으로 접근할 수도 있지만
인스턴스.변수이름
으로도 접근이 가능하다.
그런데 인스턴스.변수이름=10
등으로 값을 할당하면 그 인스턴스에 같은 이름의 인스턴스 변수가 생긴다.
c1.a += 10
은 c1.a = c1.a + 10
으로 해석되는데, 여기서 앞의 c1.a는 새로운 인스턴스 변수, 뒤의 c1.a는 클래스 변수인 셈이다.