📖 객체지향 프로그래밍 개요
📖 class 구현하기 in Python
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number
def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다 : From %d to %d" % (self.back_number, new_number)) self.back_number = new_number
📖 Attribute 추가하기
__init__
, self
와 함께!__init__
은 객체 초기화 예약 함수📖 method 구현하기
class SoccerPlayer(object):
def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다:
From %d to %d" % \
(self.back_number, new_number))
self.back_number = new_number
📖 object(instance) 사용하기
jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
print("현재 선수의 등번호는 :", jinhyun.back_number)
jinhyun.change_back_number(5)
print("현재 선수의 등번호는 :", jinhyun.back_number)
📖 상속(Inheritance)
# example 1.
class Person(Object):
def __init__(self, name, age):
self.name = name
self.age = age
class Korean(Person):
pass
first_korean = Korean("Sungchul", 35)
print(first_korean.name)
# example 2.
class Person(object): # 부모 클래스 Person 선언
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def about_me(self): # Method 선언
print("저의 이름은", self.name,"이구요, 제 나이는", str(self.age),"살 입니다.")
class Employee(Person): # 부모 클래스 Person으로부터 상속
def __init__(self, name, age, gender, salary, hire_date):
super().__init__(name, age, gender)
self.salary = salary
self.hire_date = hire_date
def do_work(self): # 새로운 Method 추가
print("열심히 일을 합니다.")
def about_me(self): # 부모 클래스 함수 재정의
super().about_me() # 부모 클래스 함수 사용
print("제 급여는", self.salary,"원 이구요, 제 입사일은", self.hire_date,"입니다.")
📖 Polymorphism overview
📖 Polymorphism code
class Animal:
def __init__(self, name): # Constructor of the class
self.name = name
def talk(self): # Abstract method, defined by convention only
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
animals = [Cat('Missy'), Cat('Mr. Mistoffelees'), Dog('Lassie')]
for animal in animals:
print(animal.name + ': ' + animal.talk())
📖 Visibility overview
📖 Visibility Example 1
class Product(object):
pass
class Inventory(obejct):
def __init__(self):
# Private 변수로 선언하여 타객체가 접근하지 못함
self.__items__ = []
def add_new_item(self, product):
if type(product) == Product:
self.__items.append(product)
print("new item added")
else:
raise ValueError("Invalid Item")
def get_number_of_items(self):
return len(self.__items)
my_inventory = Inventory()
my_inventory.add_new_item(Product())
my_inventory.add_new_item(Product())
print(my_inventory.get_number_of_items())
print(my_my_inventory.__items)
my_inventory.add_new_item(object)
📖 Visibility Example 2
class Inventory(obejct):
def __init__(self):
self.__items__ = []
@property
# property decorator : 숨겨진 변수를 반환하게 해줌
def items(self):
return self.__items
my_inventory = Inventory()
my_inventory.add_new_item(Product())
my_inventory.add_new_item(Product())
print(my_inventory.get_number_of_items())
# property decorator로 함수를 변수처럼 호출
items = my_inventory.items
items.append(Product())
print(my_inventory.get_number_of_items())
📖 First-class object
# example 1
def squqre(x):
return x * x
# 함수를 변수로 사용
f = square
f(5)
# example 2.
def square(x):
return x * x
def cube(x):
return x * x * x
# 함수를 parameter로 사용
def formula(method, argumenr_list):
return [method(value) for value in argument_list]
📖 Inner function
def print_msg(msg):
def printer():
print(msg)
printer()
print_msg("Hello, Python")
# example 1.
def print_msg(msg):
def printer():
print(msg)
return printer
another = print_msg("Hello, Python")
another()
# example 2.
def tag_func(tag, text):
text = text
tag = tag
def inner_func():
return '<{0}>{1}<{0}>'.format(tag, text)
return inner_func
h1_func = tag_func('title', "This is Python Class")
p_func = tag_func('p', "Data Academy")
📖 decorator function
# example 1.
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
@star
def printer(msg):
print(msg)
printer("Hello")
# example 2.
def star(func):
def inner(*args, **kwargs):
print("*" * 30)
func(*args, **kwargs)
print("*" * 30)
return inner
def percent(func):
def inner(*args, **kwargs):
print("%" * 30)
func(*args, **kwargs)
print("%" * 30)
return inner
@star
@percent
def printer(msg):
print(msg)
printer("Hello")
# example 3.
def generate_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
<이 게시물은 최성철 교수님의 Object Oriented Programming 강의 자료를 참고하여 작성되었습니다.>
본 포스트의 학습 내용은 [부스트캠프 AI Tech 5기] Pre-Course 강의 내용을 바탕으로 작성되었습니다.
부스트캠프 AI Tech 5기 Pre-Course는 일정 기간 동안에만 운영되는 강의이며,
AI 관련 강의를 학습하고자 하시는 분들은 부스트코스 AI 강좌에서 기간 제한 없이 학습하실 수 있습니다.
(https://www.boostcourse.org/)