*파이썬 클래스 변수 vs 인스턴스 변수 차이
면접에서 받은 질문이어서 정리해둔다.
다음과 같은 차이가 있다.
클래스 변수 | 인스턴스 변수 | |
무엇인가? | 클래스 내부에 선언된 변수 | self가 붙어 있는 변수. 클래스의 인스턴스가 생성될 때 생성 |
변수의 존재 위치 | class의 namespace에 위치 | instance의 namespace의 위치 |
언제 사용? | 인스턴스 간에 서로 공유해야 하는 값. 클래스 변수는 모든 인스턴스에 공유된다. (e.g. 현재 은행에 총 개설된 계좌의 개수) | 인스턴스 간 고유한 값. 다른 인스턴스에 공유되면 안 되는 값. (e.g. 이름) |
class Account:
num_accounts = 0
def __init__(self, name):
self.name = name
Account.num_accounts += 1
def __del__(self):
Account.num_accounts -= 1
print("(클래스 변수) 객체 생성 전: ", Account.num_accounts)
kim = Account("kim")
lee = Account("lee")
print("(인스턴스 변수) kim 객체의 이름: ", kim.name)
print("(인스턴스 변수) lee 객체의 이름: ", lee.name)
print("(클래스 변수) kim 객체: ", kim.num_accounts)
print("(클래스 변수) 클래스: " ,Account.num_accounts)
클래스 변수는 위와 같이 각각 인스턴스에 공통으로 공유되는 변수이고,
인스턴스 변수는 다른 인스턴스에 공유되지 않는다.
-참고문헌
'Computer Science > Python' 카테고리의 다른 글
Python 딕셔너리 정렬 (Key, Value 기준 sort) (1) | 2022.04.09 |
---|---|
[Python] list 복사 ([:], copy(), deepcopy()) (0) | 2021.02.11 |
python list append() vs extend() 차이 (0) | 2021.01.31 |
[Python] is 와 == 의 차이 (0) | 2021.01.26 |