파이썬 파트15. 클래스와 객체지향 프로그래밍 - 클래스, 인스턴스, 메소드

|

파이썬 파트15. 클래스와 객체지향 프로그래밍

try hello world 파이썬 입문 강의

자료형 (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와 instance의 개념

클래스(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) 리턴