Python 에서 클래스가 다른 클래스의 서브클래스인지 확인하는 방법

PythonBeginner
지금 연습하기

소개

이 랩에서는 Python 에서 클래스가 다른 클래스의 서브클래스인지 확인하는 방법을 배우게 됩니다. 이는 객체 지향 프로그래밍의 기본 개념인 클래스 상속을 탐구하는 과정을 포함합니다.

먼저 생성자와 speak 메서드를 가진 부모 클래스 Animal을 생성합니다. 그런 다음 Animal로부터 상속받아 speak 메서드를 재정의하는 자식 클래스 DogCat을 생성합니다. 마지막으로 issubclass() 함수를 사용하고 __bases__ 속성을 검사하여 서브클래스 관계를 결정하는 방법을 배우게 됩니다.

클래스 상속 탐구

이 단계에서는 객체 지향 프로그래밍 (OOP) 의 기본 개념인 클래스 상속에 대해 배우게 됩니다. 상속을 통해 기존 클래스 (부모 클래스) 의 속성과 메서드를 상속받는 새로운 클래스 (자식 클래스) 를 만들 수 있습니다. 이는 코드 재사용을 촉진하고 더 체계적이고 유지 관리 가능한 코드를 구축하는 데 도움이 됩니다.

Animal이라는 간단한 부모 클래스를 생성하는 것으로 시작해 보겠습니다.

## ~/project 디렉토리에 animal.py 라는 파일을 생성합니다.
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print("Generic animal sound")

VS Code 편집기를 열고 ~/project 디렉토리에 animal.py라는 새 파일을 만듭니다. 위의 코드를 복사하여 파일에 붙여넣습니다. 이 클래스에는 name 속성을 초기화하는 __init__ 메서드 (생성자) 와 일반적인 동물 소리를 출력하는 speak 메서드가 있습니다.

이제 Animal 클래스에서 상속받는 Dog라는 자식 클래스를 만들어 보겠습니다.

## animal.py 에 다음 코드를 추가합니다.
class Dog(Animal):
    def speak(self):
        print("Woof!")

위의 코드를 animal.py 파일에 추가합니다. Dog 클래스는 클래스 이름 뒤 괄호 안에 Animal을 지정하여 Animal로부터 상속받습니다. Dog 클래스는 또한 자체적인 특정 구현을 제공하기 위해 speak 메서드를 재정의합니다.

다음으로, Animal 클래스에서 상속받는 또 다른 자식 클래스인 Cat을 만들어 보겠습니다.

## animal.py 에 다음 코드를 추가합니다.
class Cat(Animal):
    def speak(self):
        print("Meow!")

위의 코드를 animal.py 파일에 추가합니다. Cat 클래스도 Animal로부터 상속받아 speak 메서드를 재정의합니다.

이제 이러한 클래스를 사용하기 위한 메인 프로그램을 만들어 보겠습니다.

## ~/project 디렉토리에 main.py 라는 파일을 생성합니다.
from animal import Animal, Dog, Cat

animal = Animal("Generic Animal")
dog = Dog("Buddy")
cat = Cat("Whiskers")

animal.speak()
dog.speak()
cat.speak()

~/project 디렉토리에 main.py라는 새 파일을 만들고 위의 코드를 복사하여 파일에 붙여넣습니다. 이 프로그램은 animal.py 파일에서 Animal, Dog, 및 Cat 클래스를 가져옵니다. 그런 다음 각 클래스의 인스턴스를 생성하고 해당 speak 메서드를 호출합니다.

프로그램을 실행하려면 VS Code 에서 터미널을 열고 ~/project 디렉토리로 이동합니다.

cd ~/project

그런 다음 python 명령을 사용하여 main.py 스크립트를 실행합니다.

python main.py

다음 출력을 볼 수 있습니다.

Generic animal sound
Woof!
Meow!

이는 DogCat 클래스가 Animal 클래스에서 상속받아 speak 메서드의 자체적인 특정 구현을 제공하는 방법을 보여줍니다. 이것은 Python 에서 클래스 상속의 기본적인 예입니다.

issubclass() 함수 사용

이 단계에서는 issubclass() 함수를 사용하여 클래스가 다른 클래스의 서브클래스인지 확인하는 방법을 배우게 됩니다. 이 함수는 첫 번째 인수가 두 번째 인수의 서브클래스인 경우 True를 반환하고 그렇지 않으면 False를 반환하는 내장 Python 함수입니다.

이전 단계의 예제를 계속 사용하여 issubclass() 함수를 사용하여 Animal, Dog, 및 Cat 클래스 간의 관계를 확인해 보겠습니다.

VS Code 편집기를 열고 ~/project 디렉토리에 issubclass_example.py라는 새 파일을 만듭니다. 다음 코드를 복사하여 파일에 붙여넣습니다.

## ~/project 디렉토리에 issubclass_example.py 라는 파일을 생성합니다.
from animal import Animal, Dog, Cat

print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))
print(issubclass(Dog, Cat))
print(issubclass(Animal, Dog))
print(issubclass(Animal, Animal))

이 프로그램은 이전 단계에서 생성한 animal.py 파일에서 Animal, Dog, 및 Cat 클래스를 가져옵니다. 그런 다음 issubclass() 함수를 사용하여 다음 관계를 확인합니다.

  • DogAnimal의 서브클래스인가요?
  • CatAnimal의 서브클래스인가요?
  • DogCat의 서브클래스인가요?
  • AnimalDog의 서브클래스인가요?
  • AnimalAnimal의 서브클래스인가요?

프로그램을 실행하려면 VS Code 에서 터미널을 열고 ~/project 디렉토리로 이동합니다.

cd ~/project

그런 다음 python 명령을 사용하여 issubclass_example.py 스크립트를 실행합니다.

python issubclass_example.py

다음 출력을 볼 수 있습니다.

True
True
False
False
True

이 출력은 다음을 보여줍니다.

  • DogAnimal의 서브클래스입니다 (True)
  • CatAnimal의 서브클래스입니다 (True)
  • DogCat의 서브클래스가 아닙니다 (False)
  • AnimalDog의 서브클래스가 아닙니다 (False)
  • Animal은 자기 자신의 서브클래스입니다 (True)

issubclass() 함수는 코드에서 클래스 간의 상속 관계를 확인하는 데 유용합니다. 이는 코드가 예상대로 작동하는지 확인하고 더 강력하고 유지 관리 가능한 코드를 작성하는 데 도움이 될 수 있습니다.

bases 속성 검토

이 단계에서는 클래스의 직접적인 부모 클래스를 찾기 위해 클래스의 __bases__ 속성을 검사하는 방법을 배우게 됩니다. __bases__ 속성은 클래스의 부모 클래스를 포함하는 튜플입니다.

이전 단계의 예제를 계속 사용하여 Animal, Dog, 및 Cat 클래스의 __bases__ 속성을 검사해 보겠습니다.

VS Code 편집기를 열고 ~/project 디렉토리에 bases_example.py라는 새 파일을 만듭니다. 다음 코드를 복사하여 파일에 붙여넣습니다.

## ~/project 디렉토리에 bases_example.py 라는 파일을 생성합니다.
from animal import Animal, Dog, Cat

print(Dog.__bases__)
print(Cat.__bases__)
print(Animal.__bases__)

이 프로그램은 이전 단계에서 생성한 animal.py 파일에서 Animal, Dog, 및 Cat 클래스를 가져옵니다. 그런 다음 각 클래스의 __bases__ 속성을 출력합니다.

프로그램을 실행하려면 VS Code 에서 터미널을 열고 ~/project 디렉토리로 이동합니다.

cd ~/project

그런 다음 python 명령을 사용하여 bases_example.py 스크립트를 실행합니다.

python bases_example.py

다음 출력을 볼 수 있습니다.

(<class 'animal.Animal'>,)
(<class 'animal.Animal'>,)
(<class 'object'>,)

이 출력은 다음을 보여줍니다.

  • Dog 클래스는 Animal 클래스에서 상속받습니다.
  • Cat 클래스는 Animal 클래스에서 상속받습니다.
  • Animal 클래스는 Python 의 모든 클래스의 기본 클래스인 object 클래스에서 상속받습니다.

__bases__ 속성은 클래스의 상속 계층 구조를 이해하는 데 유용합니다. 이는 디버깅 및 더 유지 관리 가능한 코드를 작성하는 데 도움이 될 수 있습니다.

요약

이 랩에서는 객체 지향 프로그래밍의 핵심 개념인 Python 의 클래스 상속을 탐구했습니다. 생성자와 speak 메서드를 가진 부모 클래스 Animal을 생성한 다음, Animal에서 상속받는 자식 클래스 DogCat을 정의했습니다.

이러한 자식 클래스는 자체적인 특정 구현을 제공하기 위해 speak 메서드를 재정의하여 상속이 코드 재사용과 특화를 어떻게 가능하게 하는지 보여주었습니다. 마지막으로, 이러한 클래스의 인스턴스를 생성하고 해당 speak 메서드를 호출하여 서로 다른 출력을 관찰했습니다.