반응형
# 클래스 선언 및 self의 이해
클래스 선언
클래스 네임스페이스 self
클래스, 인스턴스 변수
self
# 클래스, 인스턴스 차이 중요
# 네임스페이스 : 객체를 인스턴스화할 때 저장된 공간
# 클래스 변수 : 직접 사용 가능, 객체보다 먼저 생성
# 인스턴스 변수 : 객체마다 별도로 존재, 인스턴스 생성 후 사용
# 클래스 선언
# class 클래스명:
# 함수
# 함수
# 함수
# 속성 : 이름, 키, ...
# 메소드 : 동작
# 예제1
class UserInfo:
def __init__(self,name):
self.name = name
def user_info_p(self):
print("Name : ",self.name)
# 네임스페이스
user1 = UserInfo("Kim") # 인스턴스 생성
print(user1.name) # Kim
user1.user_info_p() # Name : Kim
user2 = UserInfo("Park")
print(user2.name) # Park
user2.user_info_p() # Name : Park
print(id(user1)) # 140480848385360
print(id(user2)) # 140480848385488
print(user1.__dict__) # {'name': 'Kim'}
print(user2.__dict__) # {'name': 'Park'}
# 예제2
# self의 이해
class SelfTest:
def function1(): # 클래스 메소드 ( self 인자가 없기 때문에 인스턴스에서 호출 못함)
print('function1 called!')
def function2(self): # 인스턴스 메소드
print('function2 called!')
self_test = SelfTest() # 인스턴스 생성
# self_test.function1()
SelfTest.function1() # function1 called!
self_test.function2() # function2 called!
print(id(self_test)) # 140480848385616
SelfTest.function2(self_test) # function2 called!
# 예제 3
#클래스 변수, 인스턴스 변수(self 필요)
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')
user3 = WareHouse('Lee')
print(user1.__dict__) # {'name': 'Kim'}
print(user2.__dict__) # {'name': 'Park'}
print(user3.__dict__) # {'name': 'Lee'}
print(WareHouse.__dict__) # 클래스 네임스페이스, 클래스 변수 (공유)
#{'__module__': '__main__', 'stock_num': 3, '__init__': <function WareHouse.__init__ at 0x7fc43f1177a0>, '__del__': <function WareHouse.__del__ at 0x7fc43f117830>, '__dict__': <attribute '__dict__' of 'WareHouse' objects>, '__weakref__': <attribute '__weakref__' of 'WareHouse' objects>, '__doc__': None}
print(user1.name) # Kim
print(user2.name) # Park
print(user3.name) # Lee
print(user1.stock_num) # 3 # 자기 네임스페이스에 없으면 클래스 네임 스페이스에서 찾고 거기에도 없으면 에러
print(user2.stock_num) # 3
print(user3.stock_num) # 3
del user1
print(user2.stock_num) # 2 # user 1 지울 때 del
print(user3.stock_num) # 2
반응형
'Algorithm > 자료구조, 알고리즘' 카테고리의 다른 글
[코딩 + 알고리즘 완주반] 7일차. 모듈, 패키지 (0) | 2021.03.21 |
---|---|
[코딩 + 알고리즘 완주반] 7일차. 상속, 다중상속 (0) | 2021.03.21 |
[코딩 + 알고리즘 완주반] 6일차. 함수, Lambda (0) | 2021.03.20 |
[코딩 + 알고리즘 완주반] 5일차. 조건문, 반복문,List Comprehension, QUIZ (0) | 2021.03.19 |
[코딩 + 알고리즘 완주반] 4일차. 딕셔너리, 집합, 데이터타입 퀴즈 (0) | 2021.03.18 |