본문 바로가기

Python/Python 어렵게 배우기

Python 어렵게 배우기 - Exercise 40: Modules, Classes, and Objects

원문 : http://learnpythonthehardway.org/book/ex40.html


개발을 하다보면 다른사람이 만든 module 이나 class를 가져다 쓸 경우가 있다.

import 라는 명령어를 사용해서 외부 라이브러리(다른사람들이 만든 프로그램)를 가져다 쓸 수 있다.


Module

python 의 함수, 변수, class 와 같은 코드를 담고 있는 ".py" 파일 하나를 하나의 모듈 이라고 생각하면 된다.


아래와 같은 모듈이 있다고 했을 때 (mystuff.py)

def apple():
    print "I AM Apples!"

tangerine = "Living reflection of a dream"


위 코드를 사용하고 싶으면 (python shell)...

import mystuff
mystuff.apple()
#I AM Apples!
mystuff.tangerine
#Living reflection of a dream

위와 같이 import 로 module을 불러와서 사용 하면 된다.





Class

class 는 모듈 같은 놈이다. 함수와 변수를 가질 수 있다. 어디서나 변함 없이 사용될 함수나, 공통으로 사용될 변수 같은 경우 module에 작성해서 사용 하면 되겠지만. 독립된 기능이나 별개의 변수를 사용하고 싶은 경우, 어떤 특정한 객체를 표현 하고 싶은 경우에는 class를 사용한다. 

위에서 module로 만들었던 mystuff.py를 class로 변경해 보자.

class MyStuff(object):
    def __init__(self):
        self.tangerine = "And now a thousand years between"

    def apple(self):
        print "I Am Classy Apples!!"


위에서 나온 "__init__(self)", self 와 같은 놈들은 object를 설명하면서 알아보자



Objects

class는 그냥 선언 같은거다. 이런이런 함수와 이런이런 변수들이있는 MyStuff 라는 클래스다! 라고 선언만 한거라고 생각하면된다.

class를 실제로 사용하기 위해서는 실체가 있는 object로 만들어야 한다. object는 class를 가지고 만든 것 으로 하나의 class로 여러개의 object를 만들 수 있다.

쉽게 이야기 해 보면

노트북 이라는 어떤 스펙이나 정의를 class 라고 한다면

삼성 센스, lg xnote, hp envy  뭐 이런 실질적인 제품을 object라고 할 수 있다. (더 어려운가?)


어쨋건 object는 class를 실현한, class를 사용하기 위한 실체 정도로 생각하자

위에서 만든 MyStuff 란 class의 object를 만들고 사용 해 보자

thing = MyStuff()
thing.apple()
#I Am Classy Apples!!
thing.tangerine
#'And now a thousand years between'




__init__(self) 함수는 초기화 함수로 object를 처음 만들때 실행된다.

위 코드에서 보면

thing = MyStuff()

할 때 실행 된다.


self 는 object 자체를 말한다. 위 코드 기준으로 보면 self는 thing 이 된다.

class를 만들때 "이 class는 나중에 어떤 object로 생성이 될텐데 그 object를 self 라고 한다." 라고 정한것이다.




추가 Class 예제

class Song(object):

    def __init__(self, lyrics):
        self.lyrics = lyrics

    def sing_me_a_song(self):
        for line in self.lyrics:
            print line

happy_bday = Song(["Happy birthday to you",
                   "I don't want to get sued",
                   "So I'll stop right there"])
bulls_on_parade = Song(["They rally around the family",
                        "With pockets full of shells"])







반응형