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
반응형

'Python > 클래스' 카테고리의 다른 글

Python 추상클래스(abstract class)  (0) 2023.09.25
Python 클래스 상속, 오버라이딩  (0) 2023.09.22
Python 생성자, 소멸자, self  (0) 2023.09.21
Python 클래스, 객체, 인스턴스  (0) 2023.09.21