nathan_H

python class - duck typing 본문

Programming Laguage/Python

python class - duck typing

nathan_H 2019. 4. 30. 18:44

 

python의 특징중 하나는

다형성을 느슨하게 구현했다.

 

이것은 클래스에 상관없이 같은 동작을

다른 객체에 적용할 수 있다는 것을 의미한다.

 

class Char():
    
    def __init__(self, name):
        self.name = name
        self.power = 15
        self.level = 1
    
    def says(self):
        return f"i am {self.name}!"

    def status(self):
        return f"power: {self.power} level: {self.level}"


class CharChange(Char):

    def say(self):
        return f"i am {self.name}!"
    
    def status(self, power):
        self.power = power
        return f"power: {self.power} level: {self.level}"


def who_char(char):
    print(char.says())

if __name__ == "__main__":
    ch1 = Char("zilet")
    ch2 = Char("mutal")
    print(ch1.says()+ " and " + ch2.says())
    print(ch1.status(), ch2.status())
    ch1 = CharChange("marine")
    ch2 = CharChange("zerg")
    print(ch1.says()+ " and " + ch2.says())
    print(ch1.status(12), ch2.status(15))
    who_char(ch1)

 

 

출력문
i am zilet! and i am mutal!
power: 15 level: 1 power: 15 level: 1
i am marine! and i am zerg!
power: 12 level: 1 power: 15 level: 1
i am marine!

CharChange 클래스에는

초기화를 해주지 않았다.

그러므로 __init__() method를 오버라이드 하지않아

부모 클래스인 Char의 __init__() 메서드를 

호출해 객체의 name, level, power에 접근할 수 있다.

 

 

그리고 who_char에서도 인자를 객체로 받아

바로 객체의 method을 호출해 출력 해줄 수 있다.

 

이러한 행위들은

파이썬에서 duck typing 이라고 부른다.

 

즉 오리처럼 꽥꽤거리고 걷는다면, 그것은 오리다.

 

'Programming Laguage > Python' 카테고리의 다른 글

python - Module  (0) 2019.05.01
python - namedtuple  (0) 2019.04.30
python - class method type.  (0) 2019.04.30
python - function 과 method  (0) 2019.04.30
python - namespace  (0) 2019.04.26
Comments