반응형
목차
1. OOP
- 객체: 속성(attribute)와 행동(action)을 가짐
- 속성은 변수(variable), 행동은 함수(method)로 표현
- OOP는 이러한 객체 개념을 프로그램으로 표현
- OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눔
2. class
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number
# class 예약어
# class명(SoccerPlayer)은 camelcase naming rule을 사용함 ( 띄어쓰기 부분에 대문자 )
# 함수와 변수는 snake_case naming rule을 사용함 (띄어쓰기 부분에 _ 추가)
# object는 상속받는 객체명임 -> 안적어줘도 object 자동상속됨
# __init__은 객체를 초기화하는 함수
# self는 생성된 인스턴스 자신을 의미함
3. __의 의미
- \_는 특수한 예약함수나 변수 그리고 함수명 변경(맨글링)으로 사용
ex) __main_\, __add_\, __str_\, __eq__
class SoccerPlayer(object):
def __init__(self, name:str, position: str, back_number: int):
self.name = name
self.position = position
self.back_number = back_number
# 특별한 예약함수로 print()를 재정의함
def __str__(self):
return f"Hello, My name is {self.name}"
# 특별한 예약함수로 두개의 객체를 더할 수 있음
def __add__(self,other):
return self.back_number + other.back_number
def change_back_number(self, new_number):
self.back_number = new_number
iniesta = SoccerPlayer("Iniesta", "MF", 8)
print(iniesta) -> My name is Iniesta
xavi = SoccerPlayer("Xavi","MF",6)
iniesta + xavi => 14
xavi.change_back_number(5) # 변경됨
4. OOP characteristics
4-1. Inheritance(상속)
- 부모 클래스의 속성을 자식클래스가 내려받아서 사용
- super() 함수는 부모의 해당 함수를 실행
class Person: -> class Person(object): # (두개가 동일함)
def __init__(self, name, age):
self.name = name
self.age = age
def about_me(self):
return f"My name is {self.name}. My age is {self.age}"
class Employee(Person):
def __init__(self, name, age, salary, hire_date):
super().init(name,age)
self.salary = salary
self.hire_date = hire_date
def about_me(self):
super().about_me()
print(f" My salary is {self.salary}")
moflow = Person("Hoon", 28)
moflow.about_me() => # My name is Hoon My age is 28
moflow_employee = Employee("moflow", 28, 10000, 2021)
moflow.about_me() => # My name is Hoon My age is 28 My salary is 10000
4-2. Polymorphism(다형성)
- 같은 이름 메소드의 내부로직을 다르게 작성
- Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함
- 중요한 OOP의 개념
class Animal:
def talk(self):
raise NotImplementedError(" Subclass must implement abstract method" )
class Cat(Animal):
def talk(self):
return "MEOW"
class Dog(Animal):
def talk(self):
return "BARK"
4-3. Visibility(가시성)
- 객체의 정보를 볼 수 있는 레벨을 조절
- 누구나 객체 안에 모든 변수를 볼 필요가 없음
1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요없는 정보에는 접근 할 필요가 없음
3) 소스의 보호 - Encapsulation
- 캡슐화 또는 정보은닉 (information hiding)
- class를 설계할 때, 클래스 간 간섭과 정보공유의 최소화
class Inventory:
def __init__(self):
# __두개를 변수명 앞에 붙여서 private과 비슷한 처리
self.__items = []
@property # property decorator를 사용해서 숨겨진 변수를 return
def items(self):
return copy.deepcopy(self.__items)
5. decorator
5-1 First-class objects
- 일등함수 또는 일급 객체
- 변수나 데이터 구조에 할당이 가능한 객체
- parameter로 전달이 가능 + 리턴값으로 사용
- 파이썬의 함수는 일급함수다
5-2 Inner function
- 함수 내에 또 다른 함수가 존재
- closures: inner function을 return값으로 반환
def print\_msg(msg):
def printer():
print(msg)
return printer
temp = print\_msg("Hi")
temp()
5-3 Decorator function
def star(func):
def inner(_args, \*\*kwargs):
print("_" \* 5)
func(_args, \*\*kwargs)
print("_" \* 5)
return inner
@star
def printer(msg):
print(msg)
printer("Hi")
# *****
# Hi
# *****
반응형
'부스트캠프 AI Tech 2기 > Precourse' 카테고리의 다른 글
Python Exception, File, Log handling (0) | 2021.07.19 |
---|---|
Python Module, Package (0) | 2021.07.18 |
Python Pythonic (0) | 2021.07.18 |
Python Data Structure (0) | 2021.07.15 |
Python Function (0) | 2021.07.15 |