[파이썬] 인스턴스 타입 확인하고 넘기기(객체 동적 확인)

반응형
    반응형

    데이터의 타입을 일일히 확인한다고?

    파이썬은 객체니깐 type 함수를 쓰면 언제든지 확인할 수 있습니다.
    그런데 데이터가 많으면 일일이 확인할 수 없어서 for문이나 while을 돌리고 있는데 예상치 못한 타입이 나온다면 대처하기가 어렵습니다. 이럴 때 물론 type()을 활용할 수 있지만 루프를 한다면isintance()를 쓰는 걸 추천드립니다.

    isinstance란?

    파이썬은 동적 타이핑(dynamic typing) 언어로, 변수의 타입이 실행 시간(runtime)에 결정됩니다. isinstance 함수는 이러한 특성을 활용하여 객체가 특정 클래스의 인스턴스인지를 동적으로 확인하는 데 사용됩니다.

    isinstance 함수 개요

    • isinstance 함수는 객체가 특정 클래스의 인스턴스인지를 확인하는 파이썬의 내장 함수입니다.
    • 함수 구조: isinstance(object, classinfo)
    • object: 확인하고자 하는 객체
    • classinfo: 확인하고자 하는 클래스나 클래스의 튜플

    사용 예시 1: 기본 사용법

    value = 42
    
    if isinstance(value, int):
        print("이 값은 정수형입니다.")
    else:
        print("이 값은 정수형이 아닙니다.")

    사용 예시 2: 다양한 클래스 확인

    클래스도 확인이 가능합니다. 임의로 클래스를 만들어보았습니다. 상속한 경우 부모의 클래스도 가지고 있기 때문에 자식으로 확인해도 부모 클래스를 가지고 있는것으로 확인합니다.

    class Animal:
        pass
    
    class Dog(Animal):
        pass
    
    class Cat(Animal):
        pass
    
    dog_instance = Dog()
    cat_instance = Cat()
    
    if isinstance(dog_instance, Animal):
        print("이 객체는 Animal 클래스의 인스턴스입니다.")
    else:
        print("이 객체는 Animal 클래스의 인스턴스가 아닙니다.")
    
    if isinstance(cat_instance, (Dog, Cat)):
        print("이 객체는 Dog 또는 Cat 클래스의 인스턴스입니다.")
    else:
        print("이 객체는 Dog 또는 Cat 클래스의 인스턴스가 아닙니다.")

    활용 예시: 다형성(polymorphism)

    다형성은 서로 다른 클래스의 객체들이 동일한 메서드나 속성을 사용할 수 있도록 하는 개념으로 isintance 함수를 사용하여 다형성을 보다 면밀하게 구현할 수 있습니다.
    위의 클래스에 동물소리를 추가해서 활용해보겠습니다.

    class Animal:
        def speak(self):
            pass
    
    class Dog(Animal):
        def speak(self):
            return "멍멍!"
    
    class Cat(Animal):
        def speak(self):
            return "야옹!"
    
    # 다형성을 이용한 활용
    def animal_speak(animal):
        if isinstance(animal, Animal):
            return animal.speak()
        else:
            raise ValueError("올바른 동물 객체가 아닙니다.")
    
    # 객체 생성
    dog = Dog()
    cat = Cat()
    
    # 다형성을 이용한 호출
    print(animal_speak(dog))  # 출력: 멍멍!
    print(animal_speak(cat))  # 출력: 야옹!
    
    # 예외 상황 다루기
    try:
        invalid_animal = "나는 동물이 아니다."
        print(animal_speak(invalid_animal))
    except ValueError as e:
        print(f"예외 발생: {e}")
    

    다형성을 이용하기 위해 animal_speak라는 함수를 만들었고 함수에서는 인스턴스 여부에 따라 움직이게 만들었습니다. dog,cat을 넣어 보았고 invalid_animal을 통해 안되는 경우 에러가 발생하게 만들었습니다. 즉, 인스턴스의 여부에 따라 값이 제대로 나올수도 있고 오류가 나올수 있게 되었습니다.

    마치며

    isinstance 함수는 파이썬의 동적 타이핑 특성을 활용하여 객체의 타입을 동적으로 확인하는 함수입니다. 적절하게 활용하면 코드의 유연성을 높일 수 있을겁니다.

    함께 보면 좋은 글

    댓글

    Designed by JB FACTORY

    ....