파이썬 파트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) 리턴
초보몽키의 개발공부로그