클래스 상세 이해(self, 클래스, 인스턴스 변수)
클래스 상세 이해(self, 클래스, 인스턴스 변수)
예제 코드
# Section07-1
# 파이썬 클래스 상세 이해
# Self, 클래스, 인스턴스 변수
# 클래스, 인스턴스 차이 중요
# 네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간
# 클래스 변수 : 직접 사용 가능, 객체보다 먼저 생성
# 인스턴스 변수 : 객체마다 별도로 존재, 인스턴스 생성 후 사용
# 예제1
print("#==== 예제 1 ====")
class UserInfo:
def __init__(self, name):
self.name = name
def print_info(self):
print("Name: " + self.name)
def __del__(self):
print("Instance removed!")
user1 = UserInfo("Kim")
user2 = UserInfo("Park")
print(id(user1))
print(id(user2))
user1.print_info()
user2.print_info()
print('user1 : ', user1.__dict__) # 클래스 네임스페이스 확인
print('user2 : ', user2.__dict__)
print(user1.name)
print()
# 예제2
# self의 이해
print("#==== self의 이해 ====")
class SelfTest:
def function1():
print("function1 called!")
def function2(self):
print(id(self))
print("function2 called!")
f = SelfTest()
# print(dir(f))
print(id(f))
# f.function1() #예외 발생 -> function1() 에는 self가 없어서 class 변수입니다.
# class에서 직접 호출해야합니다.
# 호출 방식 -> SelfTest.function1()
f.function2()
print(SelfTest.function1())
print()
# print(SelfTest.function2()) #예외 발생 -> function2(self) 에는 self가 있어서 인스턴스 변수입니다.
# 인스턴스 선언해서 호출해야합니다.
# 호출 방식 -> f.function2()
# 예제3
# 클래스 변수 , 인스턴스 변수
print("#==== 클래스 변수 , 인스턴스 변수 ====")
class Warehouse:
# 클래스 변수
stock_num = 0
def __init__(self, name):
# 인스턴스 변수
self.name = name
Warehouse.stock_num += 1
def __del__(self):
Warehouse.stock_num -= 1
user1 = Warehouse('Kim')
user2 = Warehouse('Park')
print(user1.name)
print(user2.name)
print(user1.__dict__)
print(user2.__dict__)
print(Warehouse.__dict__) # 클래스 네임스페이스 , 클래스 변수 (공유)
# Warehouse.stock_num = 50 # 직접 접근 가능
print(user1.stock_num)
print(user2.stock_num)
실행 콘솔
#==== 예제 1 ====
2190468880608
2190468882096
Name: Kim
Name: Park
user1 : {'name': 'Kim'}
user2 : {'name': 'Park'}
Kim
#==== self의 이해 ====
2190468948368
2190468948368
function2 called!
function1 called!
None
#==== 클래스 변수 , 인스턴스 변수 ====
Instance removed!
Instance removed!
Kim
Park
{'name': 'Kim'}
{'name': 'Park'}
{'__module__': '__main__', 'stock_num': 2, '__init__': <function Warehouse.__init__ at 0x000001FE021F69D0>, '__del__': <function
Warehouse.__del__ at 0x000001FE021F6A60>, '__dict__': <attribute '__dict__' of 'Warehouse' objects>, '__weakref__': <attribute '__weakref__' of 'Warehouse' objects>, '__doc__': None}
2
2
Tip