class C:
count=0
a=C()
b=C()
c=C()
print(a.count)
print(b.count)
print(c.count)
c.count+=10
print(c.count)
print(a.count)
print(b.count)
print(C.count)
C.count+=100
print(a.count)
print(b.count)
print(c.count)
0
0
0
10
0
0
0
100
100
10
为什么后来a.count b.count的值都是100 而c.count的值是10
클래스 속성은 Java의 정적 변수와 동일하며 클래스에 속합니다.
여기서 c의 인스턴스 속성을 c.count+=10으로 정의했기 때문입니다.
그래서 print(c.count)는 10입니다
c.count+=10은 인스턴스 객체 c에 인스턴스 속성을 동적으로 추가하는 것과 동일하기 때문입니다. c.count를 인쇄하면 클래스 속성 대신 인스턴스 속성이 인쇄됩니다
으아악차근차근 보시면 됩니다.
먼저 세 개의 C 클래스 객체를 인스턴스화합니다.
a, b, c의 개수 값을 인쇄합니다.
여기에는 속성의 검색 순서가 포함됩니다.
먼저 인스턴스에 count 값이 있는지 확인하세요. 찾을 수 없으면 상위 수준으로 검색합니다. 인스턴스의 상위 레벨이 클래스입니다. class 속성에 개수가 있는 것으로 확인되면 여기에 개수가 출력됩니다.
c.count += 10
원래 c.count는 C.count를 참조하지만 이제 여기에 새 값을 할당하는 것은 count 속성을 갖는 c 인스턴스와 동일합니다.
a, b, c, C의 개수 값을 인쇄합니다. 이 시점에서 인스턴스 c에는 이미 자체 카운트 값이 있습니다.
C.count += 100
클래스 C의 카운트 값을 변경합니다. c에는 고유한 카운트 값이 있고 a와 b는 여전히 C의 카운트 값을 참조합니다.
아마도 그럴 것 같습니다.
한 문장으로 말하자면, 인스턴스가 클래스의 정적 변수에 값을 할당하면 실제로 인스턴스에 속성이 동적으로 추가됩니다. 정적 속성이 인스턴스 속성과 충돌하는 경우에는 정적 속성에 아무런 영향을 미치지 않습니다. 인스턴스에 접근하는 순서는 다음과 같습니다. 우선 순위는 다음과 같습니다: 인스턴스-》class
https://segmentfault.com/a/11...