Introdução
Neste laboratório, você aprenderá como verificar se uma classe possui um atributo específico em Python. O laboratório se concentra na compreensão de atributos de classe, que são variáveis compartilhadas por todas as instâncias de uma classe, e na diferenciação deles dos atributos de instância.
O laboratório o guiará pela criação de uma classe Dog com um atributo de classe species e atributos de instância name e age. Você aprenderá a acessar ambos os tipos de atributos e observará como a modificação de um atributo de classe afeta todas as instâncias. O laboratório então introduzirá e utilizará as funções hasattr() e getattr() para verificar e acessar com segurança atributos dentro de uma classe.
Entenda os Atributos de Classe
Nesta etapa, você aprenderá sobre atributos de classe em Python. Atributos de classe são variáveis que são definidas dentro de uma classe e são compartilhadas por todas as instâncias (objetos) dessa classe. Eles são diferentes dos atributos de instância, que são específicos para cada instância. Compreender os atributos de classe é crucial para projetar classes eficientes e organizadas.
Vamos começar criando uma classe simples com um atributo de classe:
Abra seu editor VS Code.
Crie um novo arquivo chamado
class_attributes.pyno diretório~/project.~/project/class_attributes.pyAdicione o seguinte código ao arquivo
class_attributes.py:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Criando instâncias da classe Dog dog1 = Dog("Buddy", 3) dog2 = Dog("Lucy", 5) ## Acessando o atributo de classe print(dog1.species) print(dog2.species) ## Acessando atributos de instância print(dog1.name) print(dog2.name)Neste exemplo,
speciesé um atributo de classe porque é definido dentro da classeDog, mas fora de qualquer método.nameeagesão atributos de instância porque são definidos dentro do método__init__e são específicos para cada instânciaDog.Execute o script
class_attributes.pyusando o seguinte comando no terminal:python class_attributes.pyVocê deve ver a seguinte saída:
Canis familiaris Canis familiaris Buddy LucyComo você pode ver, tanto
dog1quantodog2compartilham o mesmo valor despecies, que é "Canis familiaris". No entanto, eles têm valores denamediferentes porquenameé um atributo de instância.Agora, vamos modificar o atributo de classe e ver como isso afeta as instâncias:
class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Criando instâncias da classe Dog dog1 = Dog("Buddy", 3) dog2 = Dog("Lucy", 5) ## Acessando o atributo de classe print(dog1.species) print(dog2.species) ## Modificando o atributo de classe Dog.species = "New Species" ## Acessando o atributo de classe novamente print(dog1.species) print(dog2.species)Execute o script
class_attributes.pynovamente:python class_attributes.pyVocê deve ver a seguinte saída:
Canis familiaris Canis familiaris New Species New SpeciesObserve que, quando modificamos
Dog.species, a mudança é refletida emdog1edog2porque eles compartilham o mesmo atributo de classe.
Este exemplo demonstra o conceito básico de atributos de classe. Eles são compartilhados entre todas as instâncias de uma classe e podem ser modificados acessando a classe diretamente.
Use hasattr() na Classe
Nesta etapa, você aprenderá como usar a função hasattr() em Python para verificar se uma classe ou um objeto possui um atributo específico. Essa função é útil para determinar se um atributo existe antes de tentar acessá-lo, o que pode evitar erros e tornar seu código mais robusto.
Com base no exemplo anterior, vamos usar hasattr() para verificar a existência de atributos de classe e instância na classe Dog:
Abra o arquivo
class_attributes.pyno seu editor VS Code (o mesmo arquivo que você criou na etapa anterior).~/project/class_attributes.pyModifique o código para incluir verificações
hasattr()da seguinte forma:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Criando uma instância da classe Dog dog1 = Dog("Buddy", 3) ## Verificando a existência de atributos de classe print(hasattr(Dog, "species")) print(hasattr(Dog, "breed")) ## Verificando a existência de atributos de instância print(hasattr(dog1, "name")) print(hasattr(dog1, "age")) print(hasattr(dog1, "breed"))Neste código, usamos
hasattr()para verificar se a classeDogpossui os atributosspeciesebreed, e se a instânciadog1possui os atributosname,ageebreed.Execute o script
class_attributes.pyusando o seguinte comando no terminal:python class_attributes.pyVocê deve ver a seguinte saída:
True False True True FalseA saída mostra que a classe
Dogpossui o atributospecies(True), mas não o atributobreed(False). Da mesma forma, a instânciadog1possui os atributosnameeage(True), mas não o atributobreed(False).
hasattr() retorna True se o atributo existir e False caso contrário. Isso permite que você escreva código condicional que lida com diferentes casos com base na presença de atributos. Por exemplo, você pode querer fornecer um valor padrão se um atributo estiver ausente.
Este exemplo demonstra como usar hasattr() para verificar a existência de atributos em uma classe e suas instâncias. Esta é uma técnica útil para escrever um código mais flexível e robusto.
Acesso Seguro com getattr()
Nesta etapa, você aprenderá como usar a função getattr() em Python para acessar com segurança atributos de uma classe ou um objeto. A função getattr() permite que você forneça um valor padrão se o atributo não existir, evitando exceções AttributeError e tornando seu código mais robusto.
Continuando com o exemplo da classe Dog, vamos usar getattr() para acessar o atributo breed, que sabemos que pode não existir:
Abra o arquivo
class_attributes.pyno seu editor VS Code (o mesmo arquivo que você tem usado nas etapas anteriores).~/project/class_attributes.pyModifique o código para incluir
getattr()para acessar com segurança o atributobreed:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Criando uma instância da classe Dog dog1 = Dog("Buddy", 3) ## Acessando com segurança o atributo 'breed' usando getattr() breed = getattr(dog1, "breed", "Unknown") print(breed) ## Acessando atributos existentes print(getattr(dog1, "name"))Neste código, usamos
getattr(dog1, "breed", "Unknown")para tentar acessar o atributobreedda instânciadog1. Se o atributobreednão existir,getattr()retornará o valor padrão "Unknown". Também acessamos o atributonameexistente usandogetattr().Execute o script
class_attributes.pyusando o seguinte comando no terminal:python class_attributes.pyVocê deve ver a seguinte saída:
Unknown BuddyA saída mostra que, como o atributo
breednão existe,getattr()retornou o valor padrão "Unknown". O atributonameé acessado com sucesso usandogetattr().
Ao usar getattr() com um valor padrão, você pode evitar exceções AttributeError e lidar com casos em que um atributo pode estar ausente. Isso torna seu código mais resiliente e mais fácil de manter.
Este exemplo demonstra como usar getattr() para acessar com segurança atributos em uma classe e suas instâncias. Esta é uma técnica valiosa para escrever um código mais robusto e flexível.
Resumo
Neste laboratório, você aprendeu sobre atributos de classe em Python, que são variáveis definidas dentro de uma classe e compartilhadas por todas as instâncias. Você criou uma classe Dog com um atributo de classe species e atributos de instância name e age. Você observou que todas as instâncias da classe Dog compartilham o mesmo valor para o atributo species, enquanto cada instância possui seus próprios valores únicos para os atributos name e age.
Você também executou o script class_attributes.py e verificou a saída, confirmando que os atributos de classe são acessados da mesma forma que os atributos de instância, mas são compartilhados em todas as instâncias da classe.



