# 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