간서치 2023. 2. 10. 00:15
728x90

함수의 모음 Class

Class를 사용함으로서 함수들의 모아서 재사용할 수 있게 되었지요!

 

# 1. 클래스 선언 및 self의 이해
#  1.1. 클래스 선언
#  1.2. 클래스 네임스페이스 self
#  1.3. 클래스, 인스턴스 변수
#  1.4. self

# 선언 : 첫글자 대문자, 단어연결시 첫글자 대문자
'''
class 클래스명:
  함수
  함수
  함수
'''

# 예제 1 pass 예외처리됨

class UserInfo:
  def __init__(self, name):
    self.name = name
  def user_info_p(self):
    print("NAME: ", self.name)

user1 = UserInfo("Kim")
print(user1.name)
user1.user_info_p()
user2 = UserInfo("Park")
print(user2.name)
user2.user_info_p()

#메모리 번지 확인
print(id(user1))
print(id(user2))

#namespace 출력
print(user1.__dict__)
print(user2.__dict__)


# 클래스, 인스턴스 차이 중요
# 네임스페이스: 객체를 인스턴스화 할 때 저장된 공간
# 클래스 변수: 직접 사용가능, 객체보다 먼저 생성
# 인스턴스 변수: 객체마다 별도로 존재

# 예제2
# self의 이해

class SelfTest:
  def function1():
    print('function1 called')
  def function2(self):
    print(id(self))
    print('function2 called')

self_test = SelfTest()
#self_test.function1()
self_test.function2()    #인스턴스 생성해서 메쏘드 호출
SelfTest.function1()
SelfTest.function2(self_test) # 클래스에서 직접 호출

print(id(self_test))

# 예제 3
# 클래스 변수

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__)
print(user2.__dict__)
print(user3.__dict__)
print(WareHouse.__dict__) # 클래스 네임스페이스, 클래스 변수 (공유)

print(user1.name)
print(user2.name)
print(user3.name)

print(user1.stock_num)

del user1

print(user2.stock_num)
print(user3.stock_num)

728x90