λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
🀷🏼‍♀️ Etc.../- C, C++, Python, Android

Python κ³ κΈ‰ : 객체와 클래슀(2) 상속에 κ΄€ν•˜μ—¬

by Wonit 2019. 12. 8.

μƒμ†μ˜ 사전적 의미

 

μœ μ‚°μ„ 상속받닀에 λŒ€ν•œ 의미λ₯Ό μ΄ν•΄ν•˜λŠ”κ°€?

 

λΆ€λͺ¨λ‹˜μ—κ²Œ λΆ€λͺ¨λ‹˜μ΄ κ°–κ³ μžˆλ˜ μž¬μ‚°μ„ μžμ‹μ΄ μƒμ†λ°›κ²Œ λ˜μ–΄ λΆ€λͺ¨μ˜ μž¬μ‚°μœΌλ‘œ μƒˆλ‘œμš΄ 일을 μ‹œμž‘ν•  수 있게 λœλ‹€. μ΄λŸ¬ν•œ μ˜λ―Έκ°€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ, νŒŒμ΄μ¬μ—μ„œ μ •ν™•νžˆ λΆ€ν•©ν•œλ‹€.

 

νŒŒμ΄μ¬μ—μ„œ 상속

 

기쑴의 μ½”λ“œλ₯Ό μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ²Œ ν•  수 μžˆλŠ” 것이 λ°”λ‘œ 상속이라고 ν–ˆλŠ”λ°, μ—¬κΈ°μ„œ 기쑴의 μ½”λ“œλ₯Ό λΆ€λͺ¨ 클래슀 λ˜λŠ” 슈퍼 클래슀, 베이슀 클래슀라고 λΆ€λ₯΄κ³  μƒˆλ‘œμš΄ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μžμ‹ 클래슀, μ„œλΈŒ 클래슀, νŒŒμƒλœ 클래슀라고 ν•œλ‹€.

 

 

λΆ€λͺ¨ 클래슀 Aκ°€ 있고 AλŠ” 걸을 수 있고, 말을 ν•  수 μžˆλ‹€.

class Father():
    def walk(self):
        print('can walk')

    def talk(self):
        print('can talk')

 

이런 μƒνƒœμ—μ„œ μžμ‹ ν΄λž˜μŠ€κ°€ 상속 λ°›μ•˜λ‹€κ³  ν•΄λ³΄μž.

class Father():
    def walk(self):
        print('can walk')

    def talk(self):
        print('can talk')

class Son(Father):
    def run(self):
        print('can run')

 

상속을 λ°›κΈ° μœ„ν•΄μ„œλŠ” 클래슀λ₯Ό μ •μ˜ν•  λ•Œ λ§€κ°œλ³€μˆ˜λ‘œ μƒμ†μ˜ 클래슀 이름을 인자둜 λ„£μ–΄μ€€λ‹€.

 

μ΄λ ‡κ²Œ 상속을 λ°›κ²Œλœλ‹€λ©΄ Sonν΄λž˜μŠ€λŠ” Father의 λͺ¨λ“  μš”μ†Œλ₯Ό μ‚¬μš©ν•  수 있게 λœλ‹€.

 class Father():
    def walk(self):
        print('can walk')

    def talk(self):
        print('can talk')

class Son(Father):
    def run(self):
        print('can run')

son = Son()
son.talk()
son.run()
son.walk()

 

닀쀑 상속

 

Python은 닀쀑 상속을 ν—ˆμš©ν•œλ‹€. 닀쀑 상속을 μ΄μš©ν•˜λ©΄ μ—¬λŸ¬ 클래슀의 μš”μ†Œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

Father 클래슀
class Father():
   def walk(self):
       print('can walk')

   def talk(self):
       print('can talk')

 

Mother 클래슀
class Mother():
    def eat(self):
        print('can eat')

    def smile(self):
        print('can smile')

 

Father ν΄λž˜μŠ€μ™€ Mother클래슀λ₯Ό μƒμ„±ν–ˆλŠ”λ° 이 두 μš”μ†Œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ 닀쀑 상속을 μ΄μš©ν•˜λ©΄ λœλ‹€.

 

class Father():
    def walk(self):
        print('can walk')

    def talk(self):
        print('can talk')

class Mother():
    def eat(self):
        print('can eat')

    def smile(self):
        print('can smile')

class Son(Father, Mother):
    def run(self):
        print('can run')

son = Son()
son.talk()
son.run()
son.walk()
son.eat()
son.smile()

 

닀쀑 상속을 받을 λ•ŒλŠ” 상속 λ°›λŠ” 클래슀의 λ§€κ°œλ³€μˆ˜μ— λΆ€λͺ¨ 클래슀의 이름을 λ„£μ–΄μ€€λ‹€.

 

λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ“œ

 

μ˜€λ²„λΌμ΄λ“œλž€? Override

 

μ˜€λ²„λΌμ΄λ“œλž€ λ©”μ„œλ“œμ˜ 이름은 같은데 λ‹€λ₯Έ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œλ₯Ό λœ»ν•œλ‹€. OOP의 νŠΉμ§•μ€‘ ν•˜λ‚˜μΈ λ‹€ν˜•μ„±μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄μ„œ λ‚˜μ˜¨ κΈ°λŠ₯이닀.

 

μ‚¬μš©λ²•

 

μœ„μ—μ„œ 말 ν–ˆλ“― 상속을 λ°›κ²Œλ˜λ©΄ 상속 λ°›λŠ” ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 λͺ¨λ“  κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€λΌκ³  ν–ˆλ‹€. μš°λ¦¬λŠ” λΆ€λͺ¨ν΄λž˜μŠ€μ— μžˆλŠ” λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ ν•΄λ³Ό μ˜ˆμ •μ΄λ‹€.

 

class Hello_bot():
    def __init__(self):
        pass

    def greeting(self):
        print('Hello')

class Hello_Robot(Hello_bot):
    def greeting(self):
        print('Hello world')

robot = Hello_Robot()

robot.greeting()

 

μœ„μ—μ„œ 보면 greetingλΌλŠ” λ©”μ„œλ“œκ°€ λΆ€λͺ¨μ—λ„ 있고 μžμ‹μ—λ„ μžˆλ‹€. μ΄λŸ¬ν•œ 경우λ₯Ό μ˜€λ²„λΌμ΄λ”©μ΄λΌκ³  ν•˜λŠ”λ°, κ²°κ³ΌλŠ” μ–΄λ–€ λ©”μ„œλ“œκ°€ μ£Όλ„κΆŒμ„ κ°€μ Έκ°ˆκΉŒ?

 

λ°”λ‘œ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ λ‚΄μš©μ„ κ°€μ Έκ°„λ‹€. 이λ₯Ό λ©”μ„œλ“œ μž¬μ •μ˜λΌκ³ λ„ ν•œλ‹€.

 

λΆ€λͺ¨ν΄λž˜μŠ€ μ΄μš©ν•˜κΈ° : super

상속을 λ°›κ²Œλ˜λ©΄ λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ—†λŠ” λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜, λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•  수 μžˆλ‹€κ³  ν–ˆλŠ”λ° λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ 도움받을 수 μžˆλŠ” 방법이 ν•˜λ‚˜ 더 μžˆλ‹€. λ°”λ‘œ super ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λΆ€λͺ¨ ν΄λž˜μŠ€μ— 멀버λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.

 

class Robot():
    def __init__(self, name):
        self.name = name

    def greeting(self):
        print('Hi my name is: ', self.name)

 

Robot μ΄λΌλŠ” ν΄λž˜μŠ€μ—λŠ” 이름을 μ €μž₯ν•˜λŠ” μƒμ„±μž, 그리고 인사λ₯Ό ν•˜λŠ” λ©”μ„œλ“œκ°€ μ •μ˜λ˜μ–΄ μžˆλ‹€.

 

class Game_Robot(Robot):
    def __init__(self, name):
        super().__init__(name)

 

μžμ‹ ν΄λž˜μŠ€μ—μ„œ super().__init__(name)을 μ΄μš©ν•˜μ—¬ λΆ€λͺ¨μ— μžˆλŠ” __init__(name)에 μ ‘κ·Όν•œλ‹€.

 

robot = Game_Robot('jang')
robot.greeting()
>>>
Hi my name is:  jang

 

μ΄λ ‡κ²Œ ν•˜μ—¬ λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” μƒμ„±μžμ— μ ‘κ·Όν•˜μ˜€λ‹€.

 

λŒ“κΈ€