Python/클래스
Python 클래스 변수, 인스턴스 변수
Yonggyu
2023. 9. 25. 10:48
반응형
클래스 변수 : 클래스 내부에 선언된 변수이다.
인스턴스 변수 : 인스턴스 내부의 self가 붙은 변수를 인스턴스 변수라고한다.
클래스 변수를 접근할때는 클래스 이름.변수명 을 사용할 수도 있고, 객체명.변수명 을 통해 접근 가능하다.
클래스 변수는 객체 별로 따로따로 생성되지 않는다.그래서 공유 변수 또는 스태틱변수 라고한다.
class Test:
num_class = 0 # 클래스변수(메모리에 올라간다)
def __init__(self):
self.num_instance =0 # 인스턴스 변수(메모리에 안올라간다)
self.num_instance +=1
Test.num_class += 1
t1 = Test()
print(t1.num_class)
t2= Test()
print(t2.num_class)
t3= Test()
print(t3.num_class)
print('-'*40)
print(t1.num_instance)
print(t2.num_instance)
"""결과값
1
2
3
----------------------------------------
1
1
"""
클래스 변수는 값이 1씩 증가하여 t3을 출력할땐 3이지만 인스턴스 변수는 모두 1이다.
이것을 통해 알 수있는것은 인스턴스 끼리는 클래스 변수를 통해 값을 공유 할 수 있다는 것이다.
또한 클래스 변수를 확인할때에는 객체의 주소를 저장하고 있는 변수나 클래스이름으로도 접근하여 확인이 가능하지만, 값을 새로 할당할때에는 클래스 이름으로만 접근해야한다.
위의 코드 Test클래스를 기반으로 예시를 들어보겠다.
Test.num_class =10 # 클래스 명으로 접근
print(t1.num_class)
print(Test.num_class)
t1.num_class =11 # 변수명으로 접근
print(t1.num_class)
print(Test.num_class)
""" 결과값
10
10
11
10
"""
위 코드처럼 클래스명으로 접근해 변수에 10을 할당했을때에는 클래스 변수의 값이 변경되는것을 알 수있다.
허나 변수명으로 접근하여 값을 할당할 때에는 클래스 변수로의 접근이 아닌 새로운 인스턴스변수로 인식하여 생성되어
값이 다르다.
728x90
반응형