C++, Java, Python 등의 언어는 객체 지향 프로그래밍 언어
클래스라는 설계도를 바탕으로 Instance(객체)를 지정하여 사용
주체와 행동, 데이터를 중심으로 구현하는 것!
객체는 속성과 행동을 가지며 속성은 변수(Variable) 행동은 함수(method)로 포현됨
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
Class의 함수명 짓는 방식은 CamelCase
init, self와 함께 attribute를 추가
init은 객체 초기화 예약 함수
__main__, __add__, __str__
다음과 같은 함수는 magic method로 특수한 특성이 있음
method 추가는 기존 함수와 같으나, self를 무조건 추가해주어야 함
self는 생성된 인스턴스 자신을 의미
class Note(object):
def __init__(self, content = None):
self.content = content
def write_content(self, content):
self.content = content
def remove_all(self):
self.content = ""
def __add__(self, other):
return self.content + other.content
def __str__(self):
return self.content
class NoteBook(object):
def __init__(self, title):
self.title = title
self.page_number = 1
self.notes = {}
def add_note(self, note, page = 0):
if self.page_number < 300:
if page == 0:
self.notes[self.page_number] = note
self.page_number += 1
else:
self.notes = {page : note}
self.page_number += 1
else:
print("Page가 모두 채워졌습니다.")
def remove_note(self, page_number):
if page_number in self.notes.keys():
return self.notes.pop(page_number)
else:
print("해당 페이지는 존재하지 않습니다")
def get_number_of_pages(self):
return len(self.notes.keys())
부모 클래스의 속성과 method를 자식 클래스가 사용하는 것
super()
부모 클래스의 속성을 받아오는 코드
같은 이름 메소드의 내부 로직을 다르게 작성
함수명은 같지만 세부적인 구현을 다르게 할 수 있음
객체 안의 모든 변수를 볼 필요가 없음
캡슐화, 정보 은닉이라고도 칭함
Class를 설계할 때 클래스간 간섭/정보 공유의 최소화
변수나 데이터 구조에 할당이 가능한 객체
파이썬의 함수는 모두 일급함수
함수내에 또 다른 함수가 존재