- 클래스(class)
- 클래스 사용법
- self
- 스페셜 메서드(special method)
- 사용자 정의 데이터 타입
- 상속
- 데코레이터(decorator)
# 클래스 선언
class Calculator:
number1, number2 = 1, 2
def plus(self):
return self.number1 + self.number2
def minus(self):
return self.number1 - self.number2
# 객체 생성
calc1 = Calculator()
calc2 = Calculator()
# 메서드 실행
calc1.plus(), calc1.minus() # 3, -1
🔹 클래스 생성 시 주의사항
<식별자 컨벤션>
: 객체 자신
🔹 예시
# calc1.plus() : self.number1 + self.number2
# self.number1 + self.number2 > calc.number1 + calc.number2
class Account:
balance = 0
def insert(self, amount):
self.balance += amount
def withdraw(self, amount):
if self.balance >= amount:
self.balance -= amount
else:
print(f'잔액이 {amount-self.balance}원 부족합니다.')
: 특별한 기능을 하는 메서드
: 앞뒤로 __를 붙임
🔹 생성자 메서드 __init__()
: 변수의 초기값을 설정할 때 주로 사용
: 객체를 생성할 때(메서드 실행 단계 이전) 바로 실행되는 메서드
-> 불량 객체가 만들어질 확률이 줄어듦
class Account:
def __init__(self, balance=10000): # 스페셜 메서드
self.balance = balance
def insert(self, amount):
self.balance += amount
def withdraw(self, amount):
if self.balance >= amount:
self.balance -= amount
else:
print(f'잔액이 {amount-self.balance}원 부족합니다.')
# 객체생성
account = Account() # ERROR. 객체를 만드는 단계에서부터 초기값인 balance를 입력하지 않았기 때문
# data의 데이터 타입은 list
# data 객체가 만들어진 클래스는 list
# list 클래스는 우리가 만들지 않음 (사용자 정의 데이터 타입 X)
data = [1, 2, 3]
type(data) # list
: 다른 클래스의 변수(메서드)를 가져와서 사용하는 방법
: 코드 중복 감소 -> 코드 유지보수에 용이
🔹 상속 예시
# 상속을 사용하지 않은 경우
class iPhone1:
def call(self):
print('calling!')
class iPhone2:
def call(self):
print('calling!')
def send_msg(self):
print('sned_msg!')
class iPhone3:
def call(self):
print('calling!')
def send_msg(self):
print('sned_msg!')
def internet(self):
print('interent!')
# 상속을 사용한 경우
class iPhone1:
def call(self):
print('calling!')
class iPhone2(iPhone1): # 상속
def send_msg(self):
print('sned_msg!')
class iPhone3(iPhone2): # 상속
def internet(self):
print('interent!')
🔹 다중상속
class Human:
def walk(self):
print('think')
class Korean:
def eat(self):
print('eat kinchi')
class Kim(Korean, Human): # 다중상속
def skill(self):
print('coding!')
: 함수에서 중복되는 코드를 데코레이터 함수로 작성
: 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 주로 사용
def func1():
print('code1')
print('code2')
print('code3')
def func2():
print('code1')
print('code4')
print('code3')
def deco(func):
def wrapper(*args, **kwargs):
print('code1')
func() # == func1() : print('code2') : # == func2() : print('code4')
print('code3')
return wrapper #지역영역에서 전역영역으로 보냄
# deco 함수의 파라미터 func에 fun1이 들어감
# func1 함수는 deco 함수의 return 함수인 wrapper 함수로 변경
@deco
def func1():
print('code2')
@deco
def func2():
print('code4')
func1()
func2()
결과
code1
code2
code3
code1
code4
code3
📌 self == '객체' 자신
📌 객체의 데이터타입은 클래스다!
(사용자 정의 데이터 타입 == 내가 직접 만든 클래스)
📌 데코레이터 : 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 사용 (eg. 패스워드 입력 기능 추가)