38. Python에서 개체가 특정 형식인지 확인할 때는 isinstance

안녕하세요. 언제나 휴일, 언휴예요.

파생 형식 개체를 컬렉션에 보관할 때 특정 부분에서 해당 개체가 어떠한 형식인지 확인하여 필요한 멤버 메서드를 호출해야 할 때가 있어요. 예를 들어 피아니스트와 드러머를 보관하는 컬렉션에 있는 각 개체를 순차적으로 접근하여 해당 개체가 음악가이면 연주하기 전에 Tuning을 수행하고 드러머이면 TrunStick을 수행하려고 한다면 해당 개체가 어떠한 형식인지 판별할 수 있어야 합니다.

Python에서는 내장 함수 isinstance를 제공하여 변수가 참조하고 있는 개체가 어떠한 형식인지 확인할 수 있어요.

#isinstance 내장 함수

class Musician:
    def __init__(self,name):
        self.__name = name
        print(name + " 음악가 생성")

    def GetName(self):
        return self.__name

    def Play(self):
        print(self.__name + "음악가, 랄라라~")

class Pianist(Musician):
    def __init__(self,name):
        super().__init__(name)
        print(name+" 피아니스트")

    def Play(self):
        super().Play()
        print(self.GetName() +", 딩동댕")

    def Tuning(self):
        print("도도 레레 미미")

class Drummer(Musician):
    def __init__(self,name):
        Musician.__init__(self,name)

    def TurnStick(self):
        print("휘리릭~ 휘릭~")

band = list()
band.append(Pianist("홍길동"))
band.append(Drummer("강감찬"))

for musician in band:
    musician.Play()
    if(isinstance(musician,Pianist)):
        musician.Tuning()
    if(isinstance(musician,Drummer)):
        musician.TurnStick()
[그림 1] isinstance 내장 함수
[그림 1] isinstance 내장 함수