[230105] 멋쟁이사자처럼 AI SCHOOL 8기 'Python_박두진강사님' 복습

조세연·2023년 1월 5일
0

멋사 AI SCHOOL 8기

목록 보기
8/35

📝Today I learned

🚀 TIL 목차 🚀

  • 클래스(class)
    • 클래스 사용법
    • self
    • 스페셜 메서드(special method)
    • 사용자 정의 데이터 타입
    • 상속
    • 데코레이터(decorator)

클래스(class)

  • 변수, 함수를 묶어서 코드를 작성하는 방법
  • 객체지향을 구현하는 문법

1) 클래스 사용법

  1. 클래스선언 : 코드 작성
  2. 객체 생성 : 메모리 사용
  3. 메서드 실행 : 코드 실행
# 클래스 선언
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

🔹 클래스 생성 시 주의사항

<식별자 컨벤션>

  • 변수, 함수 : snake_case
  • 클래스 : PascalCase, UpperCamelCase

2) self

: 객체 자신

🔹 예시

# 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}원 부족합니다.')

3) 스페셜 메서드(special method)

: 특별한 기능을 하는 메서드
: 앞뒤로 __를 붙임

🔹 생성자 메서드 __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를 입력하지 않았기 때문

4) 사용자 정의 데이터 타입

  • '객체'의 데이터 타입을 뽑아보면 '클래스'가 출력됨
  • 즉, 데이터 타입 == 클래스
  • 직접 코딩해서 만들었음 == 사용자 정의
  • 따라서, 우리가 직접 만든 클래스 == 사용자 정의 데이터 타입
# data의 데이터 타입은 list
# data 객체가 만들어진 클래스는 list
# list 클래스는 우리가 만들지 않음 (사용자 정의 데이터 타입 X)
data = [1, 2, 3]
type(data) # list

5) 상속

: 다른 클래스의 변수(메서드)를 가져와서 사용하는 방법
: 코드 중복 감소 -> 코드 유지보수에 용이

🔹 상속 예시

# 상속을 사용하지 않은 경우

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!')
  • 상속 순서
    : Human > Korean > Kim (Human 클래스가 Korean 클래스에 상속. Korean(+Human) 클래스가 Kim 클래스에 상속.)
  • Kim 클래스의 객체는 walk, eat, skill 함수 3가지를 모두 가지고 있음

6) 데코레이터(decorator)

: 함수에서 중복되는 코드를 데코레이터 함수로 작성
: 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 주로 사용

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

❗이것만은 외우고 자자 Top 3

📌 self == '객체' 자신

📌 객체의 데이터타입은 클래스다!
(사용자 정의 데이터 타입 == 내가 직접 만든 클래스)

📌 데코레이터 : 원래 있던 함수에 새로운 기능을 추가한 함수로 변경할 때 사용 (eg. 패스워드 입력 기능 추가)

🌟데일리 피드백

1. 오늘의 칭찬&반성

  • 퀴즈 푸는 시간을 확보하기 위해 빠르게 집중하여 TIL을 작성했다.
  • 모르는 것이 꽤 있었으나 질문하지 않았다.

2. 내가 부족한 부분

  • 클래스 선언할 때 self 개념
  • *args, **kwargs 개념
  • 전역변수, 지역변수 개념

3. 내일의 목표

  • 퀴즈 정답 맞추기(어제는 퀴즈에 손도 못댔다 ㅠㅠ)
profile
HR Analyst가 되고 싶은

0개의 댓글