Como Verificar se uma Classe é Subclasse de Outra em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma classe é uma subclasse de outra classe em Python. Isso envolve a exploração da herança de classes, um conceito fundamental na programação orientada a objetos.

Você começará criando uma classe pai Animal com um construtor e um método speak. Em seguida, você criará as classes filhas Dog e Cat que herdam de Animal e sobrescrevem o método speak. Finalmente, você aprenderá como usar a função issubclass() e inspecionar o atributo __bases__ para determinar as relações de subclasse.

Explorar Herança de Classes

Nesta etapa, você aprenderá sobre herança de classes, um conceito fundamental na programação orientada a objetos (POO). A herança permite que você crie novas classes (classes filhas) que herdam atributos e métodos de classes existentes (classes pai). Isso promove a reutilização de código e ajuda na construção de um código mais organizado e fácil de manter.

Vamos começar criando uma classe pai simples chamada Animal:

## Create a file named animal.py in the ~/project directory
class Animal:
    def __init__(self, name):
        self.name = name

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

Abra seu editor VS Code e crie um novo arquivo chamado animal.py no diretório ~/project. Copie e cole o código acima no arquivo. Esta classe possui um método __init__ (construtor) que inicializa o atributo name e um método speak que imprime um som genérico de animal.

Agora, vamos criar uma classe filha chamada Dog que herda da classe Animal:

## Add the following code to animal.py
class Dog(Animal):
    def speak(self):
        print("Woof!")

Adicione o código acima ao arquivo animal.py. A classe Dog herda de Animal especificando Animal entre parênteses após o nome da classe. A classe Dog também sobrescreve o método speak para fornecer sua própria implementação específica.

Em seguida, vamos criar outra classe filha chamada Cat que também herda da classe Animal:

## Add the following code to animal.py
class Cat(Animal):
    def speak(self):
        print("Meow!")

Adicione o código acima ao arquivo animal.py. A classe Cat também herda de Animal e sobrescreve o método speak.

Agora, vamos criar um programa principal para usar essas classes:

## Create a file named main.py in the ~/project directory
from animal import Animal, Dog, Cat

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

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

Crie um novo arquivo chamado main.py no diretório ~/project e copie e cole o código acima no arquivo. Este programa importa as classes Animal, Dog e Cat do arquivo animal.py. Em seguida, ele cria instâncias de cada classe e chama seus métodos speak.

Para executar o programa, abra seu terminal no VS Code e navegue até o diretório ~/project:

cd ~/project

Em seguida, execute o script main.py usando o comando python:

python main.py

Você deve ver a seguinte saída:

Generic animal sound
Woof!
Meow!

Isso demonstra como as classes Dog e Cat herdam da classe Animal e fornecem suas próprias implementações específicas do método speak. Este é um exemplo básico de herança de classes em Python.

Usar a Função issubclass()

Nesta etapa, você aprenderá como usar a função issubclass() para verificar se uma classe é uma subclasse de outra classe. Esta função é uma função embutida do Python que retorna True se o primeiro argumento for uma subclasse do segundo argumento e False caso contrário.

Continuando com o exemplo da etapa anterior, vamos usar a função issubclass() para verificar as relações entre as classes Animal, Dog e Cat.

Abra seu editor VS Code e crie um novo arquivo chamado issubclass_example.py no diretório ~/project. Copie e cole o seguinte código no arquivo:

## Create a file named issubclass_example.py in the ~/project directory
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))

Este programa importa as classes Animal, Dog e Cat do arquivo animal.py que você criou na etapa anterior. Em seguida, ele usa a função issubclass() para verificar as seguintes relações:

  • Dog é uma subclasse de Animal?
  • Cat é uma subclasse de Animal?
  • Dog é uma subclasse de Cat?
  • Animal é uma subclasse de Dog?
  • Animal é uma subclasse de Animal?

Para executar o programa, abra seu terminal no VS Code e navegue até o diretório ~/project:

cd ~/project

Em seguida, execute o script issubclass_example.py usando o comando python:

python issubclass_example.py

Você deve ver a seguinte saída:

True
True
False
False
True

Esta saída mostra que:

  • Dog é uma subclasse de Animal (True)
  • Cat é uma subclasse de Animal (True)
  • Dog não é uma subclasse de Cat (False)
  • Animal não é uma subclasse de Dog (False)
  • Animal é uma subclasse de si mesma (True)

A função issubclass() é útil para verificar as relações de herança entre classes em seu código. Isso pode ser útil para garantir que seu código esteja se comportando conforme o esperado e para escrever um código mais robusto e fácil de manter.

Inspecionar o Atributo bases

Nesta etapa, você aprenderá como inspecionar o atributo __bases__ de uma classe para encontrar suas classes pai diretas. O atributo __bases__ é uma tupla que contém as classes pai de uma classe.

Continuando com o exemplo das etapas anteriores, vamos inspecionar o atributo __bases__ das classes Animal, Dog e Cat.

Abra seu editor VS Code e crie um novo arquivo chamado bases_example.py no diretório ~/project. Copie e cole o seguinte código no arquivo:

## Create a file named bases_example.py in the ~/project directory
from animal import Animal, Dog, Cat

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

Este programa importa as classes Animal, Dog e Cat do arquivo animal.py que você criou nas etapas anteriores. Em seguida, ele imprime o atributo __bases__ de cada classe.

Para executar o programa, abra seu terminal no VS Code e navegue até o diretório ~/project:

cd ~/project

Em seguida, execute o script bases_example.py usando o comando python:

python bases_example.py

Você deve ver a seguinte saída:

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

Esta saída mostra que:

  • A classe Dog herda da classe Animal.
  • A classe Cat herda da classe Animal.
  • A classe Animal herda da classe object, que é a classe base para todas as classes em Python.

O atributo __bases__ é útil para entender a hierarquia de herança de suas classes. Isso pode ser útil para depuração e para escrever um código mais fácil de manter.

Resumo

Neste laboratório, você explorou a herança de classes em Python, um conceito-chave na programação orientada a objetos. Você criou uma classe pai Animal com um construtor e um método speak, e então definiu as classes filhas Dog e Cat que herdaram de Animal.

Essas classes filhas sobrescreveram o método speak para fornecer suas próprias implementações específicas, demonstrando como a herança permite a reutilização e especialização de código. Finalmente, você criou instâncias dessas classes e chamou seus métodos speak para observar as diferentes saídas.