Boostcamp AI Tech (Day 004)
1. Python Object-Oriented Programming
1.1 OOP introduction
- object: attribute(속성), action(행동)을 가짐.
- attribute: variable
- action: method
- OOP
- class: 설계도 (붕어빵틀)
- instance: 구현체 (붕어빵)
- attribute 추가
- init(객체 초기화 예약 함수), self
- __(dunder)는 특수한 예약 함수, 변수 그리고 맨글링(함수명 변경)으로 사용
- method 구현하기
- 기존 함수와 같으나 self를 추가해야만 class 함수로 인정됨
class SoccerPlayer(object): def __init__(self, name, position, back_number : int): self.name = name self.position = position self.back_number = back_number def change_back_number(self, new_number): self.back_number = new_number def __str__(self): # print() return return "Hello, my name is %s and my back number is %d" % (self.name, self.back_number) player1 = SoccerPlayer(name1, position1, back_number1) player2 = SoccerPlayer(name2, position2, back_number2)
1.2 OOP characteristics
- 모델링에 필요한 것들
- inheritance (상속)
- 부모클래스로부터 attribute, method를 물려받는 자식클래스 생성
- class ClassChild(ClassParent)
- super() 를 사용해 부모클래스의 속성들을 불러올 수 있음
- polymorphism (다형성)
- 같은 이름의 메소드의 내부 로직을 다르게 작성
- 파이썬 dynamic typing 특성으로, 같은 부모클래스의 상속에서 주로 발생
- visibility (가시성)
- 객체의 정보를 볼 수 있는 레벨 조절
- 누구나 객체 안의 모든 변수를 볼 필요 없음, 소스 보호
- Encapsulation , information hiding
- “__variable”: private variable
class Inventory(object): def __init__(self): self.__items = [] @property # property decorator: 숨겨진 private variable 반환 def item(self): return(self, __items)
- inheritance (상속)
- decorate
- first-class objects (일급 객체): 변수나 데이터 구조에 할당 가능한 객체. parameter로 전달 가능, 리턴 값으로 사용
def formula(method, argument_list): return [method(value) for value in argument_list] # method 에 여러 가지 function() 이 들어올 수 있음
- inner function
def print_msg(msg): def printer(): print(msg) printer() print_msg("Hello, python")
def print_mss(msg): def printer(): print(msg) return printer function = print_msg("Hello, python") function()
- decorator function ex.1
def star(func): def inner(*args, **kwargs): print(args[1] * 30) func(*args, **kwargs) print(args[1] * 30) return inner @star def printer(msg): print(msg) printer("Hello, python", "*") # printer -> func # "Hello, python", "*" -> msg
- decorator function ex.2
def generator_power(exponent): def wrapper(f): def inner(*args): result = f(*args) return exponent ** result return inner return wrapper @generate_power(2) def raise_two(n): return n ** 2 print(raise_two(7)) # 2 ** (7 ** 2)
- first-class objects (일급 객체): 변수나 데이터 구조에 할당 가능한 객체. parameter로 전달 가능, 리턴 값으로 사용
2. Module and project
Module
- module: 작은 프로그램 조각 (.py file)
- modules -> package
import {같은 디렉토리의 파일명} # 모듈 내 모든 코드가 메모리에 로드 됨 # {파일명}.{함수명}() from {모듈명} import {함수명} # 모듈 내 특정 함수 호출 from {모듈명} import * # 모든 함수와 클래스 호출 from {폴더명} import {모듈명} from . import {폴더명} from game.graphic.render import render_test # 절대 참조 from ..sound.echo import echo_test # 상대 참조 (부모 디렉토리 기준)