๐Ÿ ํŒŒ์ด์ฌ ๋งค์ง ๋ฉ”์„œ๋“œ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐ŸŽฉโœจ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ ํŒŒ์ด์ฌ ๋งค์ง ๋ฉ”์„œ๋“œ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐ŸŽฉโœจ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ํŒŒ์ด์ฌ ๋งˆ๋ฒ•์‚ฌ ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ์ •๋ง ์‹ ๊ธฐ๋ฐฉ๊ธฐํ•œ ํŒŒ์ด์ฌ์˜ ๋น„๋ฐ€ ๋ฌด๊ธฐ, ๋ฐ”๋กœ "๋งค์ง ๋ฉ”์„œ๋“œ"์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด ์—ฌ๋Ÿฌ๋ถ„๋„ ์–ด๋Š์ƒˆ ํŒŒ์ด์ฌ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์–ด ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ใ…‹ใ…‹ใ…‹ ์ง„์งœ๋ฃจ์š”! ๐Ÿง™โ€โ™‚๏ธโœจ

๋งค์ง ๋ฉ”์„œ๋“œ๋Š” ํŒŒ์ด์ฌ์—์„œ ํŠน๋ณ„ํ•œ ํž˜์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋“ค์ด์—์š”. ์ด๋ฆ„ ์•ž๋’ค๋กœ ๋”๋ธ” ์–ธ๋”์Šค์ฝ”์–ด(__)๊ฐ€ ๋ถ™์–ด ์žˆ์–ด์„œ "๋˜๋” ๋ฉ”์„œ๋“œ"๋ผ๊ณ ๋„ ๋ถˆ๋Ÿฌ์š”. ์ด ๋ฉ”์„œ๋“œ๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ๋…€์„๋“ค์ด์ฃ !

์ด ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ํŒŒ์ด์ฌ์˜ ๋งค์ง ๋ฉ”์„œ๋“œ๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ๋”์šฑ ํŒŒ์ด์ฌ์Šค๋Ÿฝ๊ฒŒ(Pythonic) ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ์Šต๋“ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ˜‰

๐Ÿ’ก Pro Tip: ๋งค์ง ๋ฉ”์„œ๋“œ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ , ํšจ์œจ์ ์ด๋ฉฐ, ์šฐ์•„ํ•ด์งˆ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ์š”! โœจ

์ž, ๊ทธ๋Ÿผ ์ด์ œ ํŒŒ์ด์ฌ์˜ ๋งค์ง ์„ธ๊ณ„๋กœ ๋– ๋‚˜๋ณผ๊นŒ์š”? ์•ˆ์ „๋ฒจํŠธ ๊ฝ‰ ๋งค์„ธ์š”. ์ด ์—ฌ์ •์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ ์‹ค๋ ฅ์„ ํ•œ๊ป ๋Œ์–ด์˜ฌ๋ ค์ค„ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๐ŸŽญ ๋งค์ง ๋ฉ”์„œ๋“œ์˜ ๊ธฐ์ดˆ: __init__์™€ __str__

์šฐ๋ฆฌ์˜ ๋งค์ง ์—ฌํ–‰์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ๋‘ ๋งค์ง ๋ฉ”์„œ๋“œ๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊ฒŒ์š”. ๋ฐ”๋กœ __init__์™€ __str__์ด์—์š”. ์ด ๋‘˜์€ ํŒŒ์ด์ฌ ํด๋ž˜์Šค์˜ ๊ธฐ์ดˆ๋ฅผ ์ด๋ฃจ๋Š” ์ค‘์š”ํ•œ ๋…€์„๋“ค์ด์ฃ !

๐ŸŽฉ __init__: ๊ฐ์ฒด์˜ ํƒ„์ƒ ๋งˆ๋ฒ•

__init__ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ์˜ˆ์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์•„๊ธฐ๊ฐ€ ํƒœ์–ด๋‚  ๋•Œ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ !


class Magician:
    def __init__(self, name, specialty):
        self.name = name
        self.specialty = specialty

harry = Magician("ํ•ด๋ฆฌ", "์‚ฌ๋ผ์ง€๊ธฐ")
hermione = Magician("ํ—ค๋ฅด๋ฏธ์˜จ๋Š", "๋ณ€์‹ ์ˆ ")

์œ„์˜ ์ฝ”๋“œ์—์„œ __init__ ๋ฉ”์„œ๋“œ๋Š” ๋งˆ๋ฒ•์‚ฌ์˜ ์ด๋ฆ„๊ณผ ํŠน๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด Magician ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ์ด๋ฆ„๊ณผ ํŠน๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ฃ . ์™„์ „ ํŽธ๋ฆฌํ•˜์ง€ ์•Š๋‚˜์š”? ใ…‹ใ…‹

๐Ÿ“ข __str__: ๊ฐ์ฒด์˜ ์ž๊ธฐ์†Œ๊ฐœ ๋งˆ๋ฒ•

__str__ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ผ์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉด print() ํ•จ์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์ž๊ธฐ ์†Œ๊ฐœ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”!


class Magician:
    def __init__(self, name, specialty):
        self.name = name
        self.specialty = specialty
    
    def __str__(self):
        return f"์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” {self.specialty} ์ „๋ฌธ ๋งˆ๋ฒ•์‚ฌ {self.name}์ž…๋‹ˆ๋‹ค!"

harry = Magician("ํ•ด๋ฆฌ", "์‚ฌ๋ผ์ง€๊ธฐ")
print(harry)  # ์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์‚ฌ๋ผ์ง€๊ธฐ ์ „๋ฌธ ๋งˆ๋ฒ•์‚ฌ ํ•ด๋ฆฌ์ž…๋‹ˆ๋‹ค!

์ด์ œ Magician ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด, ๊ทธ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์ง์ ‘ ์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ์‹ ๊ธฐํ•˜์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜†

๐ŸŒŸ ๋งค์ง ํŒ: __str__ ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ , __repr__ ๋ฉ”์„œ๋“œ๋Š” ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ผ์š”. ๋‘˜ ๋‹ค ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์Šต๊ด€์ด์—์š”!

์ด ๋‘ ๋งค์ง ๋ฉ”์„œ๋“œ๋งŒ ์ž˜ ํ™œ์šฉํ•ด๋„ ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋ž˜์Šค๋Š” ํ›จ์”ฌ ๋” ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•ด์งˆ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ์ตํžˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์ด ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ตํžˆ๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋”ฉ ์‹ค๋ ฅ๋„ ์‘ฅ์‘ฅ ๋Š˜์–ด๋‚  ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๋” ํฅ๋ฏธ์ง„์ง„ํ•œ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

๐Ÿงฎ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ๋งˆ๋ฒ•: __add__, __sub__, __mul__, __truediv__

์ž, ์ด์ œ ์ •๋ง ์‹ ๊ธฐํ•œ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ๋งŒ๋‚˜๋ณผ ์‹œ๊ฐ„์ด์—์š”! ์ด๋ฒˆ์—๋Š” ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๊ด€๋ จ๋œ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋“ค๋„ ๊ธฐ๋ณธ ํƒ€์ž…์ฒ˜๋Ÿผ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด์ ธ์š”. ์™„์ „ ๋Œ€๋ฐ• ์•„๋‹ˆ์—์š”? ใ…‹ใ…‹ใ…‹

โž• __add__: ๋ง์…ˆ์˜ ๋งˆ๋ฒ•

__add__ ๋ฉ”์„œ๋“œ๋Š” '+' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋„ ๋”ํ•˜๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ์š”!


class MagicPotion:
    def __init__(self, power):
        self.power = power
    
    def __add__(self, other):
        return MagicPotion(self.power + other.power)
    
    def __str__(self):
        return f"๋งˆ๋ ฅ {self.power}์˜ ๋ฌผ์•ฝ"

healing_potion = MagicPotion(50)
strength_potion = MagicPotion(30)
super_potion = healing_potion + strength_potion
print(super_potion)  # ์ถœ๋ ฅ: ๋งˆ๋ ฅ 80์˜ ๋ฌผ์•ฝ

์šฐ์™€! ์ด์ œ ๋งˆ๋ฒ• ๋ฌผ์•ฝ๋“ค์„ ๋”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. ์™„์ „ ์‹ ๊ธฐํ•˜์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜ฒ

โž– __sub__: ๋บ„์…ˆ์˜ ๋งˆ๋ฒ•

__sub__ ๋ฉ”์„œ๋“œ๋Š” '-' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ผ๋ฆฌ ๋นผ๊ธฐ๋„ ํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicPower:
    def __init__(self, level):
        self.level = level
    
    def __sub__(self, other):
        return MagicPower(max(0, self.level - other.level))
    
    def __str__(self):
        return f"๋งˆ๋ฒ• ๋ ˆ๋ฒจ {self.level}"

wizard_power = MagicPower(100)
spell_cost = MagicPower(30)
remaining_power = wizard_power - spell_cost
print(remaining_power)  # ์ถœ๋ ฅ: ๋งˆ๋ฒ• ๋ ˆ๋ฒจ 70

์ด์ œ ๋งˆ๋ฒ•์‚ฌ์˜ ํž˜์—์„œ ์ฃผ๋ฌธ ์‚ฌ์šฉ ๋น„์šฉ์„ ๋บ„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. ๋งˆ๋ฒ• ์„ธ๊ณ„๊ฐ€ ์ ์  ํ˜„์‹ค์ด ๋˜๊ณ  ์žˆ์–ด์š”! ๐Ÿง™โ€โ™‚๏ธโœจ

โœ–๏ธ __mul__: ๊ณฑ์…ˆ์˜ ๋งˆ๋ฒ•

__mul__ ๋ฉ”์„œ๋“œ๋Š” '*' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicCookie:
    def __init__(self, flavor):
        self.flavor = flavor
    
    def __mul__(self, number):
        return [MagicCookie(self.flavor) for _ in range(number)]
    
    def __str__(self):
        return f"{self.flavor} ๋ง› ๋งˆ๋ฒ• ์ฟ ํ‚ค"

chocolate_cookie = MagicCookie("์ดˆ์ฝ”")
cookie_batch = chocolate_cookie * 3
print([str(cookie) for cookie in cookie_batch])  # ์ถœ๋ ฅ: ['์ดˆ์ฝ” ๋ง› ๋งˆ๋ฒ• ์ฟ ํ‚ค', '์ดˆ์ฝ” ๋ง› ๋งˆ๋ฒ• ์ฟ ํ‚ค', '์ดˆ์ฝ” ๋ง› ๋งˆ๋ฒ• ์ฟ ํ‚ค']

์™€์šฐ! ์ด์ œ ๋งˆ๋ฒ•์˜ ์ฟ ํ‚ค๋ฅผ ์›ํ•˜๋Š” ๋งŒํผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ฟ ํ‚ค ํŒŒํ‹ฐ ์—ด์–ด๋ณผ๊นŒ์š”? ๐Ÿช๐ŸŽ‰

โž— __truediv__: ๋‚˜๋ˆ—์…ˆ์˜ ๋งˆ๋ฒ•

__truediv__ ๋ฉ”์„œ๋“œ๋Š” '/' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”!


class MagicCake:
    def __init__(self, size):
        self.size = size
    
    def __truediv__(self, number):
        return MagicCake(self.size / number)
    
    def __str__(self):
        return f"ํฌ๊ธฐ {self.size}์˜ ๋งˆ๋ฒ• ์ผ€์ดํฌ"

big_cake = MagicCake(100)
small_cake = big_cake / 4
print(small_cake)  # ์ถœ๋ ฅ: ํฌ๊ธฐ 25.0์˜ ๋งˆ๋ฒ• ์ผ€์ดํฌ

์ด์ œ ๋งˆ๋ฒ•์˜ ์ผ€์ดํฌ๋ฅผ ์›ํ•˜๋Š” ๋งŒํผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”. ๊ณตํ‰ํ•˜๊ฒŒ ๋‚˜๋ˆ  ๋จน์„ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”! ๐Ÿฐ

๐ŸŒˆ ๋งค์ง ํŒ: ์ด๋Ÿฐ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ•ญ์ƒ ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์•„์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, isinstance(other, MagicPotion)๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ ๋Œ€์ƒ์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฑฐ์ฃ !

์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋“ค๋„ ๋งˆ์น˜ ๊ธฐ๋ณธ ํƒ€์ž…์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋Š” ๋”์šฑ ์ง๊ด€์ ์ด๊ณ  ํŒŒ์ด์ฌ์Šค๋Ÿฌ์›Œ์กŒ์–ด์š”! ๐Ÿ‘

์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ์ž์‹ ๋งŒ์˜ ๋งˆ๋ฒ• ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋ฐฐ์šฐ๋“ฏ, ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ตํžˆ๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ ์‹ค๋ ฅ์€ ํ•˜๋Š˜์„ ์ฐŒ๋ฅผ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๋” ํฅ๋ฏธ์ง„์ง„ํ•œ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”! ๐Ÿƒโ€โ™€๏ธ๐Ÿ’จ

๐Ÿ”ฎ ๋น„๊ต์˜ ๋งˆ๋ฒ•: __eq__, __lt__, __gt__

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งค์ง ์—ฌํ–‰์€ ๋น„๊ต์˜ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ€๋ณผ ๊ฑฐ์˜ˆ์š”! ์ด๋ฒˆ์— ์•Œ์•„๋ณผ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐ์ฒด๋“ค์„ ์„œ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ๋…€์„๋“ค์ด์—์š”. ์ด ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋“ค๋„ ๋Œ€์†Œ ๋น„๊ต๋‚˜ ๋™๋“ฑ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ์š”. ์™„์ „ ์‹ ๊ธฐ๋ฐฉ๊ธฐํ•˜์ง€ ์•Š๋‚˜์š”? ใ…‹ใ…‹ใ…‹

๐ŸŽญ __eq__: ๋™๋“ฑ ๋น„๊ต์˜ ๋งˆ๋ฒ•

__eq__ ๋ฉ”์„œ๋“œ๋Š” '==' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ๊ฐ™์€์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicWand:
    def __init__(self, wood, core):
        self.wood = wood
        self.core = core
    
    def __eq__(self, other):
        if not isinstance(other, MagicWand):
            return NotImplemented
        return self.wood == other.wood and self.core == other.core
    
    def __str__(self):
        return f"{self.wood} ๋‚˜๋ฌด์™€ {self.core} ์‹ฌ์˜ ๋งˆ๋ฒ• ์ง€ํŒก์ด"

harry_wand = MagicWand("ํ˜ธ๋ž‘๊ฐ€์‹œ๋‚˜๋ฌด", "๋ถˆ์‚ฌ์กฐ ๊นƒํ„ธ")
voldemort_wand = MagicWand("์ฃผ๋ชฉ๋‚˜๋ฌด", "๋ถˆ์‚ฌ์กฐ ๊นƒํ„ธ")
another_harry_wand = MagicWand("ํ˜ธ๋ž‘๊ฐ€์‹œ๋‚˜๋ฌด", "๋ถˆ์‚ฌ์กฐ ๊นƒํ„ธ")

print(harry_wand == voldemort_wand)  # ์ถœ๋ ฅ: False
print(harry_wand == another_harry_wand)  # ์ถœ๋ ฅ: True

์šฐ์™€! ์ด์ œ ๋งˆ๋ฒ• ์ง€ํŒก์ด๋“ค์ด ์„œ๋กœ ๊ฐ™์€์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. ํ•ด๋ฆฌ์˜ ์ง€ํŒก์ด์™€ ๋ณผ๋“œ๋ชจํŠธ์˜ ์ง€ํŒก์ด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฑธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„ค์š”! ๐Ÿ˜ฒ

โฌ‡๏ธ __lt__: '์ž‘๋‹ค'์˜ ๋งˆ๋ฒ•

__lt__ ๋ฉ”์„œ๋“œ๋Š” '<' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์— ์ˆœ์„œ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicPower:
    def __init__(self, level):
        self.level = level
    
    def __lt__(self, other):
        if not isinstance(other, MagicPower):
            return NotImplemented
        return self.level < other.level
    
    def __str__(self):
        return f"๋งˆ๋ฒ• ๋ ˆ๋ฒจ {self.level}"

harry_power = MagicPower(80)
hermione_power = MagicPower(95)

print(harry_power < hermione_power)  # ์ถœ๋ ฅ: True
print(hermione_power < harry_power)  # ์ถœ๋ ฅ: False

์ด์ œ ๋งˆ๋ฒ•์‚ฌ๋“ค์˜ ํž˜์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. ํ—ค๋ฅด๋ฏธ์˜จ๋Š๊ฐ€ ํ•ด๋ฆฌ๋ณด๋‹ค ๊ฐ•ํ•˜๋‹ค๋Š” ๊ฑธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„ค์š”! ์—ญ์‹œ ๊ณต๋ถ€๋ฅผ ์—ด์‹ฌํžˆ ํ•œ ๋•๋ถ„์ธ๊ฐ€ ๋ด์š”. ใ…‹ใ…‹ ๐Ÿง™โ€โ™€๏ธ๐Ÿ’ช

โฌ†๏ธ __gt__: 'ํฌ๋‹ค'์˜ ๋งˆ๋ฒ•

__gt__ ๋ฉ”์„œ๋“œ๋Š” '>' ์—ฐ์‚ฐ์ž์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑด __lt__์˜ ๋ฐ˜๋Œ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”!


class MagicPotion:
    def __init__(self, power):
        self.power = power
    
    def __gt__(self, other):
        if not isinstance(other, MagicPotion):
            return NotImplemented
        return self.power > other.power
    
    def __str__(self):
        return f"ํšจ๋Šฅ {self.power}์˜ ๋งˆ๋ฒ• ๋ฌผ์•ฝ"

healing_potion = MagicPotion(50)
strength_potion = MagicPotion(70)

print(healing_potion > strength_potion)  # ์ถœ๋ ฅ: False
print(strength_potion > healing_potion)  # ์ถœ๋ ฅ: True

์™€์šฐ! ์ด์ œ ๋งˆ๋ฒ• ๋ฌผ์•ฝ๋“ค์˜ ํšจ๋Šฅ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. ํž˜ ์ฆ๊ฐ• ๋ฌผ์•ฝ์ด ์น˜์œ  ๋ฌผ์•ฝ๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋„ค์š”! ๐Ÿ’ช๐Ÿงช

๐ŸŒŸ ๋งค์ง ํŒ: __lt__์™€ __eq__๋งŒ ๊ตฌํ˜„ํ•ด๋„ ํŒŒ์ด์ฌ์€ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ๋น„๊ต ์—ฐ์‚ฐ์ž๋“ค(<=, >, >=, !=)์˜ ๋™์ž‘์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ๋ชจ๋“  ๋น„๊ต ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•ด์š”!

์ด๋ ‡๊ฒŒ ๋น„๊ต ์—ฐ์‚ฐ์ž๋“ค์„ ์˜ค๋ฒ„๋กœ๋”ฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋“ค๋„ ๋งˆ์น˜ ์ˆซ์ž๋‚˜ ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋Š” ๋”์šฑ ์ง๊ด€์ ์ด๊ณ  ํŒŒ์ด์ฌ์Šค๋Ÿฌ์›Œ์กŒ์–ด์š”! ๐Ÿ‘

์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ์ž์‹ ๋งŒ์˜ ๋งˆ๋ฒ• ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋ฐฐ์šฐ๋“ฏ, ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ตํžˆ๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ ์‹ค๋ ฅ์€ ํ•˜๋Š˜์„ ์ฐŒ๋ฅผ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ๋”์šฑ ํฅ๋ฏธ์ง„์ง„ํ•œ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”! ์šฐ๋ฆฌ์˜ ๋งค์ง ์—ฌํ–‰์€ ์•„์ง ๋๋‚˜์ง€ ์•Š์•˜์–ด์š”! ๐Ÿง™โ€โ™‚๏ธโœจ

๐ŸŽญ ์ปจํ…Œ์ด๋„ˆ์˜ ๋งˆ๋ฒ•: __len__, __getitem__, __setitem__, __iter__

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งค์ง ์—ฌํ–‰์€ ๋”์šฑ ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ณผ ๊ฑฐ์˜ˆ์š”! ์ด๋ฒˆ์— ์•Œ์•„๋ณผ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์€ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ์ปจํ…Œ์ด๋„ˆ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ดˆ๊ฐ•๋ ฅ ๋งˆ๋ฒ•๋“ค์ด์—์š”. ์ด ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋„ ๋ฆฌ์ŠคํŠธ๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ๋Œ€๋ฐ•์ด์ฃ ? ใ…‹ใ…‹ใ…‹

๐Ÿ“ __len__: ๊ธธ์ด์˜ ๋งˆ๋ฒ•

__len__ ๋ฉ”์„œ๋“œ๋Š” len() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด์˜ '๊ธธ์ด'๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicBag:
    def __init__(self):
        self.items = []
    
    def add_item(self, item):
        self.items.append(item)
    
    def __len__(self):
        return len(self.items)
    
    def __str__(self):
        return f"๋งˆ๋ฒ• ๊ฐ€๋ฐฉ (์•„์ดํ…œ ์ˆ˜: {len(self)})"

hermione_bag = MagicBag()
hermione_bag.add_item("๋งˆ๋ฒ•์„œ")
hermione_bag.add_item("์‹œ๊ฐ„ ํšŒ์ „์ž")
hermione_bag.add_item("๊ณ ์–‘์ด ํฌ๋ฃฉ์ƒํฌ")

print(len(hermione_bag))  # ์ถœ๋ ฅ: 3
print(hermione_bag)  # ์ถœ๋ ฅ: ๋งˆ๋ฒ• ๊ฐ€๋ฐฉ (์•„์ดํ…œ ์ˆ˜: 3)

์šฐ์™€! ์ด์ œ ํ—ค๋ฅด๋ฏธ์˜จ๋Š์˜ ๋งˆ๋ฒ• ๊ฐ€๋ฐฉ์— ๋ช‡ ๊ฐœ์˜ ์•„์ดํ…œ์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์–ด์š”. ์—ญ์‹œ ํ—ค๋ฅด๋ฏธ์˜จ๋Š, ๊ฐ€๋ฐฉ ์†์— ์˜จ๊ฐ– ๊ฒƒ๋“ค์„ ๋‹ค ๋„ฃ๊ณ  ๋‹ค๋‹ˆ๋Š”๊ตฌ๋‚˜! ๐Ÿ˜†

๐Ÿ” __getitem__: ์ ‘๊ทผ์˜ ๋งˆ๋ฒ•

__getitem__ ๋ฉ”์„œ๋“œ๋Š” ๋Œ€๊ด„ํ˜ธ([])๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์˜ ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!


class SpellBook:
    def __init__(self):
        self.spells = {}
    
    def add_spell(self, name, description):
        self.spells[name] = description
    
    def __getitem__(self, spell_name):
        return self.spells[spell_name]
    
    def __str__(self):
        return f"๋งˆ๋ฒ•์„œ (์ฃผ๋ฌธ ์ˆ˜: {len(self.spells)})"

harry_spellbook = SpellBook()
harry_spellbook.add_spell("์ต์ŠคํŽ ๋ฆฌ์•„๋ฅด๋ฌด์Šค", "์ƒ๋Œ€๋ฐฉ์˜ ์ง€ํŒก์ด๋ฅผ ๋นผ์•—๋Š” ์ฃผ๋ฌธ")
harry_spellbook.add_spell("์—‘์ŠคํŽ™ํ†  ํŒจํŠธ๋กœ๋ˆ”", "๋””๋ฉ˜ํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์น˜๋Š” ์ฃผ๋ฌธ")

print(harry_spellbook["์ต์ŠคํŽ ๋ฆฌ์•„๋ฅด๋ฌด์Šค"])  # ์ถœ๋ ฅ: ์ƒ๋Œ€๋ฐฉ์˜ ์ง€ํŒก์ด๋ฅผ ๋นผ์•—๋Š” ์ฃผ๋ฌธ
print(harry_spellbook)  # ์ถœ๋ ฅ: ๋งˆ๋ฒ•์„œ (์ฃผ๋ฌธ ์ˆ˜: 2)

๋Œ€๋ฐ•! ์ด์ œ ํ•ด๋ฆฌ์˜ ๋งˆ๋ฒ•์„œ์—์„œ ์›ํ•˜๋Š” ์ฃผ๋ฌธ์„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์ง„์งœ ๋งˆ๋ฒ•์„œ๋ฅผ ํŽผ์ณ๋ณด๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? โœจ๐Ÿ“š

โœ๏ธ __setitem__: ์ˆ˜์ •์˜ ๋งˆ๋ฒ•

__setitem__ ๋ฉ”์„œ๋“œ๋Š” ๋Œ€๊ด„ํ˜ธ([])๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์„ค์ •ํ•  ๋•Œ์˜ ๋™์ž‘์„ ์ •์˜ํ•ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ๋งˆ์น˜ ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”!


class PotionCabinet:
    def __init__(self):
        self.potions = {}
    
    def __setitem__(self, name, quantity):
        self.potions[name] = quantity
    
    def __getitem__(self, name):
        return self.potions[name]
    
    def __str__(self):
        return f"๋ฌผ์•ฝ ์บ๋น„๋‹› (์ข…๋ฅ˜: {len(self.potions)})"

snape_cabinet = PotionCabinet()
snape_cabinet["์‚ฌ๋ž‘์˜ ๋ฌ˜์•ฝ"] = 5
snape_cabinet["ํด๋ฆฌ์ฃผ์Šค ๋งˆ๋ฒ•์•ฝ"] = 3

print(snape_cabinet["์‚ฌ๋ž‘์˜ ๋ฌ˜์•ฝ"])  # ์ถœ๋ ฅ: 5
snape_cabinet["์‚ฌ๋ž‘์˜ ๋ฌ˜์•ฝ"] = 4
print(snape_cabinet["์‚ฌ๋ž‘์˜ ๋ฌ˜์•ฝ"])  # ์ถœ๋ ฅ: 4
print(snape_cabinet)  # ์ถœ๋ ฅ: ๋ฌผ์•ฝ ์บ๋น„๋‹› (์ข…๋ฅ˜: 2)

์™€์šฐ! ์ด์ œ ์Šค๋„ค์ดํ”„ ๊ต์ˆ˜์˜ ๋ฌผ์•ฝ ์บ๋น„๋‹›์„ ๋งˆ์Œ๋Œ€๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ทผ๋ฐ ์‚ฌ๋ž‘์˜ ๋ฌ˜์•ฝ์ด ์™œ ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๊ฑฐ์ฃ ? ์Šค๋„ค์ดํ”„ ๊ต์ˆ˜๋‹˜... ํ˜น์‹œ... ๐Ÿค”๐Ÿ’•

๐Ÿ”„ __iter__: ์ˆœํšŒ์˜ ๋งˆ๋ฒ•

__iter__ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์ˆœํšŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค˜์š”. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ for ๋ฃจํ”„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!


class MagicDrawer:
    def __init__(self):
        self.items = []
    
    def add_item(self, item):
        self.items.append(item)
    
    def __iter__(self):
        return iter(self.items)
    
    def __str__(self):
        return f"๋งˆ๋ฒ• ์„œ๋ž (์•„์ดํ…œ ์ˆ˜: {len(self.items)})"

ron_drawer = MagicDrawer()  ron_drawer.add_item("๋ถ€์„œ์ง„ ์ง€ํŒก์ด")
ron_drawer.add_item("์ดˆ์ฝœ๋ฆฟ ๊ฐœ๊ตฌ๋ฆฌ ์นด๋“œ")
ron_drawer.add_item("๋งˆ๋ฃฌ ์Šค์›จํ„ฐ")

for item in ron_drawer:
    print(f"์„œ๋ž ์† ์•„์ดํ…œ: {item}")

print(ron_drawer)  # ์ถœ๋ ฅ: ๋งˆ๋ฒ• ์„œ๋ž (์•„์ดํ…œ ์ˆ˜: 3)

๋Œ€๋ฐ•! ์ด์ œ ๋ก ์˜ ๋งˆ๋ฒ• ์„œ๋ž ์† ์•„์ดํ…œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ๋ก ๋‹ต๊ฒŒ ๋ถ€์„œ์ง„ ์ง€ํŒก์ด๊นŒ์ง€ ์žˆ๋„ค์š”. ใ…‹ใ…‹ใ…‹ ๐Ÿง™โ€โ™‚๏ธ

๐ŸŒŸ ๋งค์ง ํŒ: __iter__ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด list(), tuple() ๊ฐ™์€ ํ•จ์ˆ˜๋“ค๋„ ์šฐ๋ฆฌ์˜ ๊ฐ์ฒด์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์šฐ๋ฆฌ์˜ ์ปค์Šคํ…€ ๊ฐ์ฒด๋ฅผ ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ํ•จ์ˆ˜๋“ค๊ณผ ๋” ์ž˜ ์–ด์šธ๋ฆฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ฃ !

์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ จ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋“ค๋„ ๋งˆ์น˜ ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ์ž๋ฃŒ๊ตฌ์กฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ๋กœ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋Š” ๋”์šฑ ํŒŒ์ด์ฌ์Šค๋Ÿฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ์–ด์š”! ๐Ÿ‘

์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ์ž์‹ ๋งŒ์˜ ๋งˆ๋ฒ• ์ปจํ…Œ์ด๋„ˆ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋ฐฐ์šฐ๋“ฏ, ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ตํžˆ๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ ์‹ค๋ ฅ์€ ๋งˆ๋ฒ•์‚ฌ ์ˆ˜์ค€์œผ๋กœ ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿง™โ€โ™‚๏ธโœจ

์šฐ๋ฆฌ์˜ ๋งค์ง ๋ฉ”์„œ๋“œ ์—ฌํ–‰์ด ๊ฑฐ์˜ ๋๋‚˜๊ฐ€๊ณ  ์žˆ์–ด์š”. ๋งˆ์ง€๋ง‰ ์„น์…˜์—์„œ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ข…ํ•ฉํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฉ‹์ง„ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿš€

๐ŸŽญ ๋งค์ง ๋ฉ”์„œ๋“œ์˜ ๋Œ€ํ–ฅ์—ฐ: ํ˜ธ๊ทธ์™€ํŠธ ๋งˆ๋ฒ• ํ•™๊ต

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๋ชจ๋“  ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ด๋™์›ํ•ด์„œ ๋ฉ‹์ง„ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ๊ฑฐ์˜ˆ์š”. ํ˜ธ๊ทธ์™€ํŠธ ๋งˆ๋ฒ• ํ•™๊ต๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณผ๊นŒ์š”? ์ด ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์šฉํ•œ์ง€ ์ง์ ‘ ์ฒดํ—˜ํ•ด๋ณด์„ธ์š”! ๐Ÿฐโœจ


class MagicStudent:
    def __init__(self, name, house):
        self.name = name
        self.house = house
        self.spells = []
    
    def __str__(self):
        return f"{self.name} ({self.house}์˜ ํ•™์ƒ)"
    
    def __len__(self):
        return len(self.spells)
    
    def __getitem__(self, index):
        return self.spells[index]
    
    def learn_spell(self, spell):
        self.spells.append(spell)

class Hogwarts:
    def __init__(self):
        self.students = []
    
    def __len__(self):
        return len(self.students)
    
    def __getitem__(self, index):
        return self.students[index]
    
    def __iter__(self):
        return iter(self.students)
    
    def __add__(self, student):
        if isinstance(student, MagicStudent):
            self.students.append(student)
        return self
    
    def __str__(self):
        return f"ํ˜ธ๊ทธ์™€ํŠธ ๋งˆ๋ฒ• ํ•™๊ต (ํ•™์ƒ ์ˆ˜: {len(self)})"

# ํ˜ธ๊ทธ์™€ํŠธ ๋งˆ๋ฒ• ํ•™๊ต ์ƒ์„ฑ
hogwarts = Hogwarts()

# ํ•™์ƒ๋“ค ์ƒ์„ฑ ๋ฐ ์ž…ํ•™
harry = MagicStudent("ํ•ด๋ฆฌ ํฌํ„ฐ", "๊ทธ๋ฆฌํ•€๋„๋ฅด")
hermione = MagicStudent("ํ—ค๋ฅด๋ฏธ์˜จ๋Š ๊ทธ๋ ˆ์ธ์ €", "๊ทธ๋ฆฌํ•€๋„๋ฅด")
draco = MagicStudent("๋“œ๋ ˆ์ด์ฝ” ๋งํฌ์ด", "์Šฌ๋ฆฌ๋ฐ๋ฆฐ")

hogwarts + harry + hermione + draco

# ํ•™์ƒ๋“ค์—๊ฒŒ ๋งˆ๋ฒ• ๊ฐ€๋ฅด์น˜๊ธฐ
harry.learn_spell("์ต์ŠคํŽ ๋ฆฌ์•„๋ฅด๋ฌด์Šค")
harry.learn_spell("์—‘์ŠคํŽ™ํ†  ํŒจํŠธ๋กœ๋ˆ”")
hermione.learn_spell("์œ™๊ฐ€๋ฅด๋””์›€ ๋ ˆ๋น„์˜ค์‚ฌ")
draco.learn_spell("์„ฌํ”„๋ผ ์„ผํ”„๋ผ")

# ํ˜ธ๊ทธ์™€ํŠธ ์ •๋ณด ์ถœ๋ ฅ
print(hogwarts)

# ํ•™์ƒ๋“ค ์ •๋ณด ์ถœ๋ ฅ
for student in hogwarts:
    print(f"{student} - ์Šต๋“ํ•œ ๋งˆ๋ฒ• ์ˆ˜: {len(student)}")
    for spell in student:
        print(f"  - {spell}")

# ํŠน์ • ํ•™์ƒ์˜ ํŠน์ • ๋งˆ๋ฒ• ํ™•์ธ
print(f"{harry}์˜ ๋‘ ๋ฒˆ์งธ ๋งˆ๋ฒ•: {harry[1]}")

์™€์šฐ! ์ด์ œ ์šฐ๋ฆฌ๋งŒ์˜ ์ž‘์€ ํ˜ธ๊ทธ์™€ํŠธ ๋งˆ๋ฒ• ํ•™๊ต๊ฐ€ ์™„์„ฑ๋˜์—ˆ์–ด์š”. ์ด ์˜ˆ์ œ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ–ˆ์–ด์š”:

  • __init__: ๊ฐ์ฒด ์ดˆ๊ธฐํ™”
  • __str__: ๋ฌธ์ž์—ด ํ‘œํ˜„
  • __len__: ๊ธธ์ด ์ •์˜
  • __getitem__: ์ธ๋ฑ์‹ฑ ์ง€์›
  • __iter__: ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ
  • __add__: ๋ง์…ˆ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ

์ด ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค ๋•๋ถ„์— ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋Š” ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ํŒŒ์ด์ฌ์Šค๋Ÿฌ์›Œ์กŒ์–ด์š”. ํ•™์ƒ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋งˆ๋ฒ•์„ ๊ฐ€๋ฅด์น˜๊ณ , ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ๋งˆ์น˜ ์‹ค์ œ๋กœ ํ˜ธ๊ทธ์™€ํŠธ๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ์ฃ ! ๐Ÿง™โ€โ™‚๏ธโœจ

๐ŸŒŸ ๋งค์ง ํŒ: ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ๋”์šฑ ์„ธ์‹ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ํƒ€์ž… ์ฒดํฌ๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋”์šฑ ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ฃ !

์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ํ™œ์šฉํ•ด์„œ ์ž์‹ ๋งŒ์˜ ๋งˆ๋ฒ• ์„ธ๊ณ„๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋ฐฐ์šฐ๋“ฏ, ์ด๋Ÿฐ ๋งค์ง ๋ฉ”์„œ๋“œ๋“ค์„ ์ตํžˆ๊ณ  ํ™œ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ ์‹ค๋ ฅ์€ ๋ค๋ธ”๋„์–ด ๊ต์ˆ˜๋‹˜ ์ˆ˜์ค€์œผ๋กœ ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿง™โ€โ™‚๏ธ๐ŸŒŸ

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์šฐ๋ฆฌ์˜ ํŒŒ์ด์ฌ ๋งค์ง ๋ฉ”์„œ๋“œ ์—ฌํ–‰์ด ๋๋‚ฌ์–ด์š”. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ ํŒŒ์ด์ฌ์˜ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์—ˆ์–ด์š”! ์ด ์ง€์‹์„ ํ™œ์šฉํ•ด ๋”์šฑ ๋ฉ‹์ง„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋”ฉ ์—ฌ์ •์— ํ–‰์šด์ด ํ•จ๊ป˜ํ•˜๊ธฐ๋ฅผ! ๐Ÿ€โœจ