7.5. Ưº°ÇÑ ¸Þ½îµåµé

(°íÄ£ ³¯ : 2001-08-30)

ÀÌÁ¦ ¸Þ½îµå¿¡ ´ëÇØ¼­´Â ´Ùµé ¾Ë°í °è½Ã°ÚÁÒ?

¸Þ½îµå¶ó´Â °ÍÀº ¿ì¸®°¡ Ŭ·¡½º¸¦ ¸¸µé¸é¼­ ±× ¾È¿¡ ¸¸µé¾î ³ÖÀº ÇÔ¼ö¸¦ ¸»ÇÏÁö¿ä?

¸¸µé¾îÁø ¸Þ½îµå¸¦ »ç¿ëÇÏ·Á¸é °´Ã¼.¸Þ½îµå()¿Í °°Àº Çü½ÄÀ¸·Î È£ÃâÀ» ÇØÁÖ¾ú±¸¿ä.

 

¿À´ÃÀº ±×·± ÀϹÝÀûÀÎ ¸Þ½îµåµé°ú´Â Á¶±Ý ´Ù¸¥ Ưº°ÇÑ ¸Þ½îµåµé¿¡ ´ëÇØ ÇÔ²² ¾Ë¾Æº¸·Á°í ÇÕ´Ï´Ù.

 

__init__ ¸Þ½îµå (ÃʱâÈ­)

 

# bookstore.py

 

class Book:

    def setData(self, title, price, author):

        self.title = title

        self.price = price

        self.author = author

 

    def printData(self):

        print 'Á¦¸ñ : ', self.title

        print '°¡°Ý : ', self.price

        print 'ÀúÀÚ : ', self.author

 

    def __init__(self):

        print 'Ã¥ °´Ã¼¸¦ »õ·Î ¸¸µé¾ú¾î¿ä~'

 

¿¹Á¦·Î Book(Ã¥) Ŭ·¡½º¸¦ °®´Â bookstore(Ã¥¹æ) ¸ðµâÀ» ¸¸µé¾î º¸¾Ò½À´Ï´Ù.

Ã¥ Ŭ·¡½ºÀÇ ¸Þ½îµå·Î´Â Ã¥ Á¦¸ñ, °¡°Ý, ÀúÀÚ¿Í °°Àº ÀÚ·áµéÀ» ÀÔ·ÂÇÒ ¶§ »ç¿ëÇÒ setData()¿Í ÀÌ·± ÀÚ·áµéÀ» Ãâ·ÂÇØÁÖ´Â printData()¸¦ ¸¸µé¾î ÁÖ¾úÁö¿ä.

±×¸®°í __init__À̶ó´Â ¸Þ½îµåµµ ÀÖÁö¿ä?

À̰ÍÀÌ ¹Ù·Î ÆÄÀ̽㿡¼­ Ưº°ÇÏ°Ô ¾à¼ÓµÈ ¸Þ½îµå °¡¿îµ¥ Çϳª·Î ÃʱâÈ­(initialize) ¸Þ½îµå¶ó°íµµ ÇÕ´Ï´Ù.

¾î¶² Ŭ·¡½ºÀÇ °´Ã¼°¡ ¸¸µé¾îÁú ¶§ ÀÚµ¿À¸·Î È£ÃâµÇ¾î¼­ ±× °´Ã¼°¡ °®°Ô µÉ ¿©·¯ °¡Áö ¼ºÁúÀ» Á¤ÇØÁÖ´Â ÀÏÀ» ÇÏÁö¿ä.


±×·³ Ã¥ Ŭ·¡½ºÀÇ °´Ã¼¸¦ Çϳª ¸¸µé¾îº¼±î¿ä?

 

>>> import bookstore

>>> b = bookstore.Book()

Ã¥ °´Ã¼¸¦ »õ·Î ¸¸µé¾ú¾î¿ä~

 

Book()ÇØ¼­ Book °´Ã¼¸¦ ¸¸µéÀÚ¸¶ÀÚ ÃʱâÈ­ ¸Þ½îµå°¡ ½ÇÇàµÇ¾ú±º¿ä.

 

³ª¸ÓÁö setData¿Í printData ¸Þ½îµåµéÀº ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.

 

>>> b.setData('´©°¡ ³» Ä¡Á ¸Ô¾úÀ»±î', '300¿ø', '¹ÌŰ')

>>> b.printData()

Á¦¸ñ :  ´©°¡ ³» Ä¡Á ¸Ô¾úÀ»±î

°¡°Ý :  300¿ø

ÀúÀÚ :  ¹ÌŰ

 

ÀÌÁ¦ ÃʱâÈ­ ¸Þ½îµå°¡ ¹ºÁö ´ëÃæ °¨À» ÀâÀ¸¼ÌÀ¸¸é __init__ ¸Þ½îµå¸¦ »ç¿ëÇØ¼­ ½ÇÁ¦·Î °´Ã¼¸¦ ÃʱâÈ­ ½ÃÄѺ¸µµ·Ï ÇϰڽÀ´Ï´Ù.

__init__ ¸Þ½îµå¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çغ¸¼¼¿ä.

 

    def __init__(self, title, price, author):

        self.setData(title, price, author)

        print 'Ã¥ °´Ã¼¸¦ »õ·Î ¸¸µé¾ú¾î¿ä~'

 

°´Ã¼¸¦ »ý¼º½Ãų ¶§ Á¦¸ñ, °¡°Ý, ÀúÀÚ¸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼­, setData ¸Þ½îµå¿¡°Ô ³Ñ°ÜÁÖµµ·Ï ÇßÁÒ?

¹°·Ð ÃʱâÈ­ ¸Þ½îµå¿¡¼­ Á÷Á¢ º¯¼ö¸¦ ´Ù·ïµµ »ó°ü¾øÁö¸¸ setData ¸Þ½îµå¸¦ ¹Ì¸® ¸¸µé¾îµ×À¸´Ï±î ÀÌ¿ëÀ» ÇÑ °ÍÀÔ´Ï´Ù.

ÀÌÁ¦ºÎÅÍ Ã¥ °´Ã¼¸¦ ¸¸µé ¶§´Â ´ÙÀ½°ú °°ÀÌ ¼¼ °³ÀÇ ÀÎÀÚ¸¦ ³Ñ°ÜÁà¾ßÇÕ´Ï´Ù.

 

>>> reload(bookstore)

>>> b2 = bookstore.Book('³»°¡ ¸Ô¾úÁö·Õ', '200¿ø', '¹Ì´Ï')

Ã¥ °´Ã¼¸¦ »õ·Î ¸¸µé¾ú¾î¿ä~

 

±×·±´ë·Î ¾µ ¸¸ ÇÏÁÒ? °ªÀÌ Àß µé¾î°¬´ÂÁöµµ È®ÀÎÇØº¸¼¼¿ä.

Âü°í·Î ¸»¾¸µå¸®¸é, ÃʱâÈ­ ¸Þ½îµå¿Í °°Àº °ÍÀ» ´Ù¸¥ °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­´Â »ý¼ºÀÚ(constructor)¶ó°í ºÎ¸¥´ä´Ï´Ù.

 

__del__ ¸Þ½îµå (¼Ò¸êÀÚ)

 

__init__ ¸Þ½îµå¿Í ¹Ý´ë·Î °´Ã¼°¡ ¾ø¾îÁú ¶§ È£ÃâµÇ´Â ¸Þ½îµåµµ ÀÖ½À´Ï´Ù.

ÀÌ·± °ÍÀ» ¼Ò¸êÀÚ(destructor)¶ó°í Çϴµ¥, ÆÄÀ̽㿡¼­´Â __del__ ¸Þ½îµå°¡ ¼Ò¸êÀÚÀÇ ¿ªÇÒÀ» ¸Ã°í ÀÖÁÒ.

 

°´Ã¼°¡ ¾ø¾îÁö´Â ¼öµµ Àֳı¸¿ä? ¹¹ÇÏ·Á°í ¾ø¾Ö³Ä±¸¿ä?

del ¹®À» »ç¿ëÇØº¸¼¼¿ä. ´çÀå ¾ø¾îÁý´Ï´Ù.

¶Ç, ¸¸µé¾î µÐ °´Ã¼°¡ ´õ ÀÌ»ó ÇÊ¿ä ¾ø¾îÁö¸é ÆÄÀ̽ãÀÌ ¾Ë¾Æ¼­ ó¸®ÇØÁֱ⵵ Çϱ¸¿ä.

±×°Ç Á÷Á¢ __del__ ¸Þ½îµå¸¦ ¸¸µé¾î¼­ Å×½ºÆ®Çغ¸½Ã¸é Àß ¾Æ½Ç ¼ö ÀÖ°ÚÁÒ?

±×³É ´Ù¸¥ ¸Þ½îµå¿Í ¶È°°ÀÌ ÀÛ¼ºÇÏ½Ã¸é µË´Ï´Ù.

¾î¶² °´Ã¼°¡ ¾ø¾îÁö±â Àü¿¡ ¹º°¡ 󸮸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é ¼Ò¸êÀÚ°¡ À¯¿ëÇÏ°Ô ¾²À̰ÚÁö¿ä?

 

__repr__ ¸Þ½îµå (ÇÁ¸°ÆÃ)

 

À̹ø¿£ printData¿Í °°Àº ¸Þ½îµå¸¦ È£ÃâÇÏ´Â ´ë½Å, ÆÄÀ̽ãÀÇ ±âº»¹®ÀÎ print ¹®À» »ç¿ëÇØ¼­ Ã¥ Á¦¸ñÀ» Âï¾îº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

ÀÌ·± ÀÏÀ» °¡´ÉÇÏ°Ô ÇØÁÖ´Â °ÍÀº ¹Ù·Î __repr__ ¸Þ½îµåÀÌÁö¿ä.

Ã¥ Ŭ·¡½º¿¡ ¾Æ·¡¿Í °°ÀÌ __repr__ ¸Þ½îµå¸¦ Ãß°¡ÇØÁÖ¼¼¿ä.

 

    def __repr__(self):

        return self.title

 

º° ´Ù¸¥ °ÍÀº ¾ø±¸¿ä, return ¹®À» »ç¿ëÇß´Ù´Â °Í¸¸ ´«¿©°Üº¸½Ã¸é µË´Ï´Ù.

__repr__ ¸Þ½îµå´Â ¡®¹®ÀÚ¿­¡¯À» ¡®return¡¯ ÇÑ´Ù°í »ý°¢ÇÏ½Ã¸é µÇ°ÚÁÒ?

 

±×·³ Ã¥¹æ ¸ðµâÀ» ÀçÀûÀçÇÏ°í »õ Ã¥À» ¸¸µé¾î¼­ Å×½ºÆ®Çغ¸¼¼¿ä.

 

>>> b3 = bookstore.Book('³ªµÎ Á» Áà', '100¿ø', 'Á㺭·è')

Ã¥ °´Ã¼¸¦ »õ·Î ¸¸µé¾ú¾î¿ä~

>>> print b3

³ªµÎ Á» Áà

 

__add__ ¸Þ½îµå (µ¡¼À)

 

ÀÌÁ¦ Ã¥¹æÀº ¹®À» ´Ý°í ¼¼¸ð, ³×¸ð, µ¿±×¶ó¹Ì °°Àº µµÇüÀ» ¸¸µé¾îº¼±î¿ä?

 

# shape.py

 

class Shape:

    area = 0

 

    def __add__(self, other):

        return self.area + other.area

 

Çб³¿¡¼­ µµÇü¿¡ ´ëÇØ ¹è¿ï ¶§´Â ´Ã ³ÐÀÌ¿¡ ´ëÇØ »ý°¢À» ÇÏÁö¿ä?

¿©±â¼­´Â µÎ µµÇüÀÇ ³ÐÀ̸¦ ´õÇÏ´Â __add__ ¸Þ½îµå¸¦ ¸¸µé¾îº¸¾Ò½À´Ï´Ù.

µÎ °³ÀÇ °´Ã¼ self¿Í other¸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼­ ±× µÑÀÇ ³ÐÀ̸¦ ´õÇÑ °ªÀ» µ¹·ÁÁÖ´Â ÀÏÀ» Çϵµ·Ï ÇßÁö¿ä.

 

>>> a = shape.Shape()

>>> a.area = 20

>>> b = shape.Shape()

>>> b.area = 10

>>> a + b

30

 

µµÇü a¿Í b¸¦ µ¡¼À ¿¬»êÀÚ(+)·Î ´õÇß´õ´Ï µÎ µµÇüÀÇ ³ÐÀ̰¡ ´õÇØÁ³ÁÒ?

¸¶Ä¡ º¸ÅëÀÇ µÎ ¼ýÀÚ¸¦ ´õÇÏ´Â °Íó·³ °£´ÜÇÏ°Ô ¸»ÀÔ´Ï´Ù.

 

ÀÌ¿Í °°ÀÌ Æ¯º°ÇÑ ¸Þ½îµå¸¦ »ç¿ëÇØ¼­ ¿¬»êÀÚ°¡ ÇÏ´Â ÀÏÀ» Á¤ÀÇÇÏ´Â °ÍÀ» ¿¬»êÀÚ Áߺ¹(overload)À̶ó°í ºÎ¸¥´ä´Ï´Ù.

¿¬»êÀÚ Áߺ¹À» ÀÌ¿ëÇÏ¸é »ç¿ëÀÚ°¡ Á÷Á¢ ¸¸µç Ŭ·¡½ºÀÇ °´Ã¼¿¡ ´ëÇØ¼­µµ ¿¬»êÀÚ¸¦ ¾µ ¼ö ÀÖ°Ô µÇÁö¿ä. ¸¶Ä¡ ÆÄÀ̽ã ÀÚü¿¡¼­ Á¦°øÇÏ´Â ÀÚ·áÇüó·³ ¸»ÀÔ´Ï´Ù.

 

¾ÆÁ÷µµ »çÅÂÀÇ ½É°¢¼ºÀ» ÀÌÇØ ¸øÇÏ°í ¡°a + b°¡ ¹¹ ¾î·±æ·¡? ¿ø·¡ ±×³É ´õÇÏ¸é µÇ´Â °ÅÀݾÆ~¡±¶ó°í ÇϽô ºÐµé! --#

Shape Ŭ·¡½º¿¡ __add__ ¸Þ½îµå¸¦ ³ÖÁö ¸»°í °´Ã¼ µÎ °³¸¦ ¸¸µç ´ÙÀ½¿¡ ´õÇØº¸¼¼¿ä.

Áö³ª°¡´ø ¹ìÀÌ ¿ô½À´Ï´ç¡¦--;

 

±×¸®°í ¹ú¼­ ´«Ä¡Ã¤½Å ºÐµµ ÀÖ°ÚÁö¸¸, µ¡¼À ¿¬»êÀÚ ´ë½Å __add__ ¸Þ½îµå¸¦ Á÷Á¢ È£ÃâÇØµµ ±× °á°ú´Â ¶È°°´ä´Ï´Ù.

 

>>> a.__add__(b)

30

 

±×·³ µµÇü °´Ã¼ °£¿¡ »¬¼Àµµ ÇÒ ¼ö ÀÖµµ·Ï __sub__ ¸Þ½îµåµµ ¸¸µé¾îº¸¼¼¿ä~.

 

__cmp__ ¸Þ½îµå (ºñ±³)

 

ÀÌÁ¦ ¿¬»êÀÚ Áߺ¹¿¡ ´ëÇØ¼­ ¾î´À Á¤µµ °¨ÀÌ ÀâÈ÷½ÃÁÒ?

ÆÄÀ̽㿡¼­ Á¦°øÇÏ´Â ¿¬»êÀÚ Áߺ¹ ¸Þ½îµå´Â À̿ܿ¡µµ ¸¹ÀÌ Àֱ⠶§¹®¿¡ ¸ðµÎ »ìÆìº¸±â´Â Èûµé°Ú³×¿ä.

¸¶Áö¸·À¸·Î µÎ °³ÀÇ °´Ã¼¸¦ ºñ±³ÇÏ´Â ºñ±³ ¿¬»êÀÚ(<, >, ==)¸¦ ¾µ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ¸Þ½îµå¸¦ »ìÆìº¸¸é¼­ Á¤¸®¸¦ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.

Shape Ŭ·¡½º¿¡ ¾Æ·¡¿Í °°ÀÌ __cmp__ ¸Þ½îµå¸¦ Ãß°¡ÇØÁÖ¼¼¿ä.

 

    def __cmp__(self, other):

        if self.area < other.area :

            return -1

        elif self.area == other.area :

            return 0

        else :

            return 1

 

µÎ °´Ã¼ self¿Í other¸¦ ºñ±³Çؼ­ self°¡ Å©¸é 1À», other°¡ Å©¸é –1À» µ¹·ÁÁÖ°í, µÎ ¼ö°¡ °°À» ¶© 0À» µ¹·ÁÁÖµµ·Ï Çß½À´Ï´Ù.

ÀÌÁ¦ µÎ ¼ýÀÚ¸¦ ºñ±³ÇϵíÀÌ µÎ °´Ã¼¸¦ ±×³É ºñ±³ÇÏ¸é µÇ°ÚÁÒ?

shape ¸ðµâÀ» ÀçÀûÀçÇÏ°í »õ·Î¿î °´Ã¼µéÀ» ¸¸µé¾î¼­ °¢°¢ area °ªÀ» Á¤ÇØÁØ ´ÙÀ½, µÎ °´Ã¼¸¦ ºñ±³Çغ¸¼¼¿ä.

 

>>> if c > d: print 'c°¡ ´õ ³Ð¾î¿ä~'

...

c°¡ ´õ ³Ð¾î¿ä~

 

ºñ±³°¡ Àß µÇ³ª¿ä?

 

¿À´Ã °­Á´ Á» ±æ¾îÁ³±º¿ä.

¾Æ±îµµ ¸»¾¸µå·ÈÁö¸¸ ¿¬»êÀÚ Áߺ¹ ¸Þ½îµå´Â ¿À´Ã º¸¿©µå¸° °Í ¸»°íµµ ¸¹ÀÌ ÀÖÀ¸´Ï ´Ù¸¥ ÀÚ·áµµ ã¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù.

±×·³¡¦

I¡¯ll be back¡¦ ^^