파이썬 파트15. 클래스와 객체지향 프로그래밍 - 클래스, 인스턴스, 메소드
26 Feb 2017 | python 파이썬 클래스 객체지향 메소드 인스턴스파이썬 파트15. 클래스와 객체지향 프로그래밍
자료형 (data type)
자료형 확인 및 검사
# type() 함수를 통한 자료형 확인
>>> s = 'hello'
>>> type(s)
<class 'str'> #string 문자열
>>> f = 3.14
>>> type(f)
<class 'float'> #floating point 부동소수점
# isinstace() 함수를 통한 자료형 검사
>>> isinstance(42, int)
True
자료형 종류
<class 'list'> #리스트
<class 'dict'> #딕셔너리
<class 'tuple'> #튜플
<class 'int'> #정수
<class 'float'> #소수
인스턴스(instance)의 이해
클래스
- 함수나 변수들을 모아 놓은 집합체
인스턴스
- 클래스에 의해 생성된 객체
- 인스턴스 각자 자신의 값을 가지고 있다.
list1 = [1, 2, 3]
list2 = [1, 2, 3]
if list1 is list1: #둘이 같은 인스턴스인지 확인
print("당연히 list1과 list1은 같은 인스턴스입니다.")
if list1 == list2: #둘이 같은 값을 가지는지 확인
print("list1과 list2의 값은 같습니다.")
if list1 is list2:
print("그리고 list1과 list2는 같은 인스턴스입니다.")
else:
print("하지만 list1과 list2는 다른 인스턴스입니다.")
# 당연히 list1과 list1은 같은 인스턴스입니다.
# list1과 list2의 값은 같습니다.
# 하지만 list1과 list2는 다른 인스턴스입니다.
클래스(class) 만들기
클래스와 인스턴스를 이용하면 데이터와 코드를 사람이 이해하기 쉽게 포장할 수 있다. 클래스를 사용하는 이유는 현실의 개념을 더 쉽게 코드에서 표현하기 위해서이다.
클래스 선언
#인간 클래스 작성
class Human():
'''사람'''
인스턴스 생성
# Human 클래스의 인스턴스로 person1, person2 생성
person1 = Human()
person2 = Human() # 인간 클래스의 인스턴스가 person2에 생긴다.
# 리스트 클래스의 인스턴스를 만드는 예
a = list()
isinstance(a, list) # True
# 리스트의 다양한 기능을 사용할 수 있었던 건 리스트에 이미 기능들이 구현되어 있기 때문이다.
클래스의 특성 만들기 예시
person1.language = '한국어'
person2.language = 'English'
person1.name = '서울사람'
person2.name = '인도사람'
def speak(person):
print('{}이 {}로 말을 합니다'.format(person.name, person.language))
Human.speak = speak
person1.speak() # 서울사람이 한국어로 말을 합니다
person2.speak() # 인도사람이 English로 말을 합니다
모델링 (modeling)
클래스로 현실의 개념을 표현하는 것
class Human():
'''인간 클래스'''
def create_human(name, weight):
person = Human()
person.name = name
person.weight = weight
return person
Human.create = create_human
person = Human.create('몽키', 50)
def eat(person):
person.weight += 0.1
print('{}가 먹어서 {}kg이 되었습니다.'.format(person.name, person.weight))
def walk(person):
person.weight -= 0.1
print('{}가 걸어서 {}kg이 되었습니다.'.format(person.name, person.weight))
Human.eat = eat
Human.walk = walk
person.walk()
person.eat()
person.walk()
메소드(method)
- 메소드는 함수와 비슷하다.
- 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수
클래스 내부에 함수를 포함시킨 예
class Human( ):
'''인간'''
def create( name, weight ): # 다음 강의에서 자세히 설명
person = Human()
person.name = name
person.weight = weight
return person
def eat( self ): # 메소드의 첫번째 매개변수 이름은 self를 많이 사용한다.
self.weight += 0.1
print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))
def walk( self ):
self.weight -= 0.1
print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))
person = Human.create("철수", 60.5)
person.eat()
self
- 메소드의 첫번째 인자
- 인스턴스의 매개변수를 전달 할 때는 self 매개변수는 생략하고 전달
특수한 메소드
초기화 함수
__init__
: 인스턴스를 만들 때 자동으로 실행되는 함수
문자열화 함수
__str__
: 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수
class Human():
'''인간'''
#__언더바2개__ 는 파이썬에서 특별한 함수라는 의미
def __init__(self, name, weight):
'''초기화 함수''' # 인스턴스 생성시 자동으로 실행되는 함수
self.name = name
self.weight = weight
def __str__(self):
'''문자열화 함수''' # 인스턴스 자체를 출력할 때의 형식을 지정하는 함수
return "{}(몸무게 {}kg)".format(self.name, self.weight)
person = Human('몽키', '47') # 초기화 함수 사용
print(person) # 문자열화 함수 사용
# 몽키(몸무게 47kg) 리턴