티스토리 뷰

python lecture/basic

[edu] 파이썬 시작하기 - 5

burningrizen 2018. 8. 27. 21:30

[클래스]



현실세계에 있는 것을 코드로 표현할 수 있습니다.



예를 들어 사람이라는 객체를 만들어 볼게요



사람은 이름, 체중 이라는 정보를 가지고 있습니다.



식사를 하면 체중이 증가 합니다.



실제 사람에서 필요한 것만 뽑아서 객체로 만들때 이러한 과정을 추상화 라고 합니다.



class human :
def __init__(self, name):
self.name = name
self.weight = 1

def eat(self, food):
self.weight += food


human 이라는 클래스를 정의 했습니다.



__init__ 라는 함수는 human 이라는 클래스의 생성자로 최초 생성 될때 불리게 되는 함수 입니다.



클래스의 모든 함수에는 self 가 첫번째 인자이고 이것은 따로 넘겨주지 않아도



python 에서 자동으로 넘겨준다.



self 는 human 이라는 클래스의 인스턴스 자체를 의미 합니다.



사람이라는 클래스가 있다면 철수, 제임스, 영호 가 인스턴스에 해당한다.



인스턴스는 해당 클래스 타입의 변수다.



self.name, self.weight 는 각각 인스턴스 자기 자신의 멤버 변수이다. 


클래스를 정의하고 실체를 만들어 사용하려면 인스턴스를 생성해야 한다.



다음과 같이 인스턴스를 생성해야 클래스를 실체화하여 사용할 수 있습니다.


h = human("kim")

위에 정의된 human 이라는 클래스의 h 라는 인스턴스를 생성하였다.


human("kim") 은 생성자로 클래스의 인스턴스를 생성하는 것인데 이때  __init__ 이 호출된다.


여기서 human("kim") 과 __init__ 동일하다.


그런데 위에서 __init__ 는 인자를 self, name 두가지를 받는다고 정의 했는데


human("kim") 에서는 name 하나만 받았다.


self 는 파이썬에서 자동으로 넘겨준다.





이제 생성된 인스턴스의 함수, 변수에 접근해보자.


h.eat(10)
print(h.name,h.weight)

h 라는 인스턴스에 미리 정의된 eat 이라는 함수를 호출 하였고


h 의 멤버변수 name 과 weight 를 각각 호출 하였다.


eat 함수에서도 첫번째 인자인 self 는 자동으로 넘겨주기 때문에 food 의 인자값만

넘겨 주었다.


멤버함수 혹은 멤버변수 접근은 


 . 써주고 그뒤에는 접근할 멤버변수 혹은 멤버함수를 호출 하면된다.







[더블언더스코어]



파이썬에서는 __ 로 시작하는 함수가 존재한다.



위에서 배운 __init__ 도 이것에 포함된다.



파이썬에서 __은 더블언더스코어 혹은 던더 라고 불린다.



더블언더스코어가 붙는 함수는 미리정의 되어 있는 특별한 이름의 함수 이다.



클래스에서 사용되는 __init__ 이외에 __str__ 도 알아보자



__str__ 은 해당 클래스를 대표하는 문자열이다.

class human :
def __init__(self, name):
self.name = name
self.weight = 1

def eat(self, food):
self.weight += food

def __str__(self):
return 'name={} weight={}'.format(self.name, self.weight)


이렇게 정의할 수 있다. 



중요한건 문자열을 return 하고 있다.



print(h)


print 문의 인풋은 문자열이 들어가기 때문에 인스턴스를 넣으면 



해당 인스턴스를 대표하는 문자열 __str__ 이 호출된다.








[정적변수]



클래스의 멤버 변수를 정의해 봤습니다.



어떤 공간에 공들을 추상화하였다.



여기서 받는 중력값은 모튼 인스턴스가 공통의 값을 가진다. 


class Thing:

gravity = 9.8

@staticmethod
def set_gravity(gravity):
Thing.gravity = gravity


t1 = Thing()
Thing.set_gravity(10)
print(Thing.gravity)

정적변수는 모든 인스턴스가 1개의 변수에 접근한다.

인스턴스를 생성하지 않아도 접근가능하다.







[과제]



- 체육관의 회원을 클래스로 추상화 해보자


- __str__ 을 이용하여 회원정보를 출력해보자


- 회원정보는 나이,이름,등록한 달수 , 함수는 기간연장, 탈퇴 



댓글