Introdução
Neste laboratório, você aprenderá como verificar se um objeto possui um determinado método em Python. O laboratório aborda métodos de objetos, com foco em como eles encapsulam o comportamento dentro de objetos para um código organizado e reutilizável.
Você explorará a classe Dog com métodos como __init__, bark e get_name, criando instâncias e chamando esses métodos. O laboratório então o guiará através do uso de hasattr() e callable() para determinar se um objeto possui um método específico. Finalmente, você obterá uma compreensão da Ordem de Resolução de Métodos (Method Resolution Order - MRO).
Aprenda Sobre Métodos de Objetos
Nesta etapa, você aprenderá sobre métodos de objetos em Python. Métodos são funções que estão associadas a objetos. Eles são usados para realizar operações nos dados do objeto. Compreender os métodos de objetos é crucial para trabalhar com objetos e classes em Python.
Vamos começar criando uma classe simples chamada Dog:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
return "Woof!"
def get_name(self):
return self.name
Crie um arquivo chamado dog.py no seu diretório ~/project usando o editor VS Code. Copie e cole o código acima no arquivo dog.py.
Esta classe tem três métodos:
__init__: Este é o método construtor. Ele é chamado quando um novo objeto da classe é criado. Ele inicializa os atributos do objeto.bark: Este método retorna a string "Woof!".get_name: Este método retorna o nome do cão.
Agora, vamos criar um objeto da classe Dog e chamar seus métodos. Crie um novo arquivo chamado main.py no diretório ~/project:
from dog import Dog
my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.bark())
print(my_dog.get_name())
Salve o arquivo main.py.
Para executar o script main.py, abra seu terminal e navegue até o diretório ~/project:
cd ~/project
Em seguida, execute o script usando o comando python:
python main.py
Você deve ver a seguinte saída:
Woof!
Buddy
Neste exemplo, my_dog é um objeto da classe Dog. Estamos chamando os métodos bark e get_name no objeto my_dog usando a notação de ponto (.).
Os métodos de objetos permitem que você encapsule o comportamento dentro de objetos, tornando seu código mais organizado e reutilizável. Eles são uma parte fundamental da programação orientada a objetos em Python.
Verificação com hasattr() e callable()
Nesta etapa, você aprenderá como usar as funções hasattr() e callable() em Python. Essas funções são úteis para inspecionar objetos e determinar se eles possuem certos atributos ou métodos.
hasattr(object, attribute_name): Esta função verifica se um objeto possui um determinado atributo. Ela retornaTruese o atributo existir eFalsecaso contrário.callable(object): Esta função verifica se um objeto é chamável (ou seja, pode ser chamado como uma função). Ela retornaTruese o objeto for chamável eFalsecaso contrário.
Vamos continuar com a classe Dog da etapa anterior. Abra o arquivo dog.py no seu diretório ~/project usando o editor VS Code. O conteúdo deve ser:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
return "Woof!"
def get_name(self):
return self.name
Agora, vamos criar um novo arquivo chamado check_methods.py no diretório ~/project para demonstrar o uso de hasattr() e callable():
from dog import Dog
my_dog = Dog("Buddy", "Golden Retriever")
print(hasattr(my_dog, "name"))
print(hasattr(my_dog, "bark"))
print(hasattr(my_dog, "age"))
print(callable(my_dog.bark))
print(callable(my_dog.name))
Salve o arquivo check_methods.py.
Neste exemplo:
hasattr(my_dog, "name")verifica se o objetomy_dogpossui um atributo chamado"name". Ele retornaráTrueporque a classeDogpossui um atributoname.hasattr(my_dog, "bark")verifica se o objetomy_dogpossui um atributo chamado"bark". Ele retornaráTrueporque a classeDogpossui um métodobark.hasattr(my_dog, "age")verifica se o objetomy_dogpossui um atributo chamado"age". Ele retornaráFalseporque a classeDognão possui um atributoage.callable(my_dog.bark)verifica se o atributomy_dog.barké chamável (ou seja, é um método). Ele retornaráTrueporquebarké um método.callable(my_dog.name)verifica se o atributomy_dog.nameé chamável. Ele retornaráFalseporquenameé um atributo string, não um método.
Para executar o script check_methods.py, abra seu terminal e navegue até o diretório ~/project:
cd ~/project
Em seguida, execute o script usando o comando python:
python check_methods.py
Você deve ver a seguinte saída:
True
True
False
True
False
Essas funções são úteis para escrever um código mais robusto e flexível que pode lidar com diferentes tipos de objetos e atributos.
Entenda a Ordem de Resolução de Métodos (MRO)
Nesta etapa, você aprenderá sobre a Ordem de Resolução de Métodos (MRO) em Python. MRO é a ordem na qual o Python procura um método em uma hierarquia de classes. É particularmente importante ao lidar com herança múltipla.
Vamos criar um novo conjunto de classes para ilustrar o MRO. Crie um arquivo chamado animal.py no seu diretório ~/project usando o editor VS Code:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Generic animal sound"
class Mammal(Animal):
def speak(self):
return "Generic mammal sound"
class Dog(Mammal):
def speak(self):
return "Woof!"
class Cat(Mammal):
def speak(self):
return "Meow!"
Salve o arquivo animal.py.
Agora, vamos criar um novo arquivo chamado mro_example.py no diretório ~/project para demonstrar o MRO:
from animal import Animal, Mammal, Dog, Cat
my_dog = Dog("Buddy")
my_cat = Cat("Whiskers")
print(my_dog.speak())
print(my_cat.speak())
Salve o arquivo mro_example.py.
Neste exemplo:
Animalé a classe base com um métodospeak.Mammalherda deAnimale sobrescreve o métodospeak.Dogherda deMammale sobrescreve o métodospeak.Catherda deMammale sobrescreve o métodospeak.
Quando você chama my_dog.speak(), o Python primeiro procura o método speak na classe Dog. Se não o encontrar lá, ele procura na classe Mammal e, em seguida, na classe Animal. Essa ordem é determinada pelo MRO.
Para executar o script mro_example.py, abra seu terminal e navegue até o diretório ~/project:
cd ~/project
Em seguida, execute o script usando o comando python:
python mro_example.py
Você deve ver a seguinte saída:
Woof!
Meow!
Agora, vamos explorar um exemplo mais complexo com herança múltipla. Crie um novo arquivo chamado mro_complex.py no diretório ~/project:
class A:
def method(self):
return "A"
class B(A):
def method(self):
return "B"
class C(A):
def method(self):
return "C"
class D(B, C):
pass
d = D()
print(d.method())
print(D.mro())
Salve o arquivo mro_complex.py.
Neste exemplo:
- A classe
Dherda deBeC. - Tanto
BquantoCherdam deA. - O
methodé definido em todas as três classesA,BeC.
Para executar o script mro_complex.py, abra seu terminal e navegue até o diretório ~/project:
cd ~/project
Em seguida, execute o script usando o comando python:
python mro_complex.py
Você deve ver a seguinte saída:
B
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
A saída B indica que o method da classe B é chamado. O método D.mro() retorna uma tupla representando a ordem de resolução de métodos para a classe D. Neste caso, o MRO é D -> B -> C -> A -> object. Isso significa que, quando você chama d.method(), o Python primeiro procura o método na classe D, depois na classe B, depois na classe C, depois na classe A e, finalmente, na classe base object.
Compreender o MRO é essencial para prever o comportamento do seu código ao usar herança, especialmente herança múltipla.
Resumo
Neste laboratório, a etapa inicial se concentra em entender os métodos de objetos em Python. Ele introduz o conceito de métodos como funções associadas a objetos, cruciais para realizar operações nos dados do objeto. Uma classe Dog é criada com métodos como __init__, bark e get_name para demonstrar como os métodos encapsulam o comportamento dentro dos objetos.
O laboratório então o guia pela criação de uma instância da classe Dog e pela chamada de seus métodos usando a notação de ponto, ilustrando como os métodos de objeto contribuem para um código organizado e reutilizável na programação orientada a objetos.



