Introduction
Dans ce laboratoire (lab), vous apprendrez à vérifier si une classe possède un attribut spécifique en Python. Le laboratoire se concentre sur la compréhension des attributs de classe, qui sont des variables partagées par toutes les instances d'une classe, et sur la différenciation entre ces attributs de classe et les attributs d'instance.
Le laboratoire vous guide dans la création d'une classe Dog avec un attribut de classe species et des attributs d'instance name et age. Vous apprendrez à accéder aux deux types d'attributs et à observer comment la modification d'un attribut de classe affecte toutes les instances. Ensuite, le laboratoire présentera et utilisera les fonctions hasattr() et getattr() pour vérifier en toute sécurité et accéder aux attributs au sein d'une classe.
Comprendre les attributs de classe
Dans cette étape, vous apprendrez à propos des attributs de classe en Python. Les attributs de classe sont des variables définies à l'intérieur d'une classe et partagées par toutes les instances (objets) de cette classe. Ils sont différents des attributs d'instance, qui sont spécifiques à chaque instance. Comprendre les attributs de classe est essentiel pour concevoir des classes efficaces et organisées.
Commençons par créer une classe simple avec un attribut de classe :
Ouvrez votre éditeur VS Code.
Créez un nouveau fichier nommé
class_attributes.pydans le répertoire~/project.~/project/class_attributes.pyAjoutez le code suivant au fichier
class_attributes.py:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Creating instances of the Dog class dog1 = Dog("Buddy", 3) dog2 = Dog("Lucy", 5) ## Accessing the class attribute print(dog1.species) print(dog2.species) ## Accessing instance attributes print(dog1.name) print(dog2.name)Dans cet exemple,
speciesest un attribut de classe car il est défini à l'intérieur de la classeDogmais en dehors de toute méthode.nameetagesont des attributs d'instance car ils sont définis à l'intérieur de la méthode__init__et sont spécifiques à chaque instance deDog.Exécutez le script
class_attributes.pyen utilisant la commande suivante dans le terminal :python class_attributes.pyVous devriez voir la sortie suivante :
Canis familiaris Canis familiaris Buddy LucyComme vous pouvez le voir, tant
dog1quedog2partagent la même valeur pourspecies, qui est "Canis familiaris". Cependant, ils ont des valeurs différentes pournamecarnameest un attribut d'instance.Maintenant, modifions l'attribut de classe et voyons comment cela affecte les instances :
class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Creating instances of the Dog class dog1 = Dog("Buddy", 3) dog2 = Dog("Lucy", 5) ## Accessing the class attribute print(dog1.species) print(dog2.species) ## Modifying the class attribute Dog.species = "New Species" ## Accessing the class attribute again print(dog1.species) print(dog2.species)Exécutez à nouveau le script
class_attributes.py:python class_attributes.pyVous devriez voir la sortie suivante :
Canis familiaris Canis familiaris New Species New SpeciesRemarquez que lorsque nous modifions
Dog.species, le changement est reflété dansdog1etdog2car ils partagent le même attribut de classe.
Cet exemple démontre le concept de base des attributs de classe. Ils sont partagés entre toutes les instances d'une classe et peuvent être modifiés en accédant directement à la classe.
Utiliser hasattr() sur la classe
Dans cette étape, vous apprendrez à utiliser la fonction hasattr() en Python pour vérifier si une classe ou un objet possède un attribut spécifique. Cette fonction est utile pour déterminer si un attribut existe avant de tenter de l'accéder, ce qui peut éviter les erreurs et rendre votre code plus robuste.
En vous appuyant sur l'exemple précédent, utilisons hasattr() pour vérifier l'existence d'attributs de classe et d'instance dans la classe Dog :
Ouvrez le fichier
class_attributes.pydans votre éditeur VS Code (le même fichier que vous avez créé à l'étape précédente).~/project/class_attributes.pyModifiez le code pour inclure des vérifications
hasattr()comme suit :class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Creating an instance of the Dog class dog1 = Dog("Buddy", 3) ## Checking for the existence of class attributes print(hasattr(Dog, "species")) print(hasattr(Dog, "breed")) ## Checking for the existence of instance attributes print(hasattr(dog1, "name")) print(hasattr(dog1, "age")) print(hasattr(dog1, "breed"))Dans ce code, nous utilisons
hasattr()pour vérifier si la classeDogpossède les attributsspeciesetbreed, et si l'instancedog1possède les attributsname,ageetbreed.Exécutez le script
class_attributes.pyen utilisant la commande suivante dans le terminal :python class_attributes.pyVous devriez voir la sortie suivante :
True False True True FalseLa sortie montre que la classe
Dogpossède l'attributspecies(True) mais pas l'attributbreed(False). De même, l'instancedog1possède les attributsnameetage(True) mais pas l'attributbreed(False).
hasattr() renvoie True si l'attribut existe et False sinon. Cela vous permet d'écrire un code conditionnel qui gère différents cas en fonction de la présence d'attributs. Par exemple, vous pourriez vouloir fournir une valeur par défaut si un attribut est manquant.
Cet exemple démontre comment utiliser hasattr() pour vérifier l'existence d'attributs dans une classe et ses instances. C'est une technique utile pour écrire un code plus flexible et robuste.
Accéder en toute sécurité avec getattr()
Dans cette étape, vous apprendrez à utiliser la fonction getattr() en Python pour accéder en toute sécurité aux attributs d'une classe ou d'un objet. La fonction getattr() vous permet de fournir une valeur par défaut si l'attribut n'existe pas, évitant ainsi les exceptions AttributeError et rendant votre code plus robuste.
En continuant avec l'exemple de la classe Dog, utilisons getattr() pour accéder à l'attribut breed, dont nous savons qu'il peut ne pas exister :
Ouvrez le fichier
class_attributes.pydans votre éditeur VS Code (le même fichier que vous avez utilisé dans les étapes précédentes).~/project/class_attributes.pyModifiez le code pour inclure
getattr()afin d'accéder en toute sécurité à l'attributbreed:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age ## Creating an instance of the Dog class dog1 = Dog("Buddy", 3) ## Safely accessing the 'breed' attribute using getattr() breed = getattr(dog1, "breed", "Unknown") print(breed) ## Accessing existing attributes print(getattr(dog1, "name"))Dans ce code, nous utilisons
getattr(dog1, "breed", "Unknown")pour tenter d'accéder à l'attributbreedde l'instancedog1. Si l'attributbreedn'existe pas,getattr()renverra la valeur par défaut "Unknown". Nous accédons également à l'attributnameexistant en utilisantgetattr().Exécutez le script
class_attributes.pyen utilisant la commande suivante dans le terminal :python class_attributes.pyVous devriez voir la sortie suivante :
Unknown BuddyLa sortie montre que puisque l'attribut
breedn'existe pas,getattr()a renvoyé la valeur par défaut "Unknown". L'attributnameest accédé avec succès en utilisantgetattr().
En utilisant getattr() avec une valeur par défaut, vous pouvez éviter les exceptions AttributeError et gérer les cas où un attribut peut être manquant. Cela rend votre code plus résilient et plus facile à maintenir.
Cet exemple démontre comment utiliser getattr() pour accéder en toute sécurité aux attributs d'une classe et de ses instances. C'est une technique précieuse pour écrire un code plus robuste et flexible.
Résumé
Dans ce laboratoire, vous avez appris à connaître les attributs de classe en Python, qui sont des variables définies à l'intérieur d'une classe et partagées par toutes les instances. Vous avez créé une classe Dog avec un attribut de classe species et des attributs d'instance name et age. Vous avez observé que toutes les instances de la classe Dog partagent la même valeur pour l'attribut species, tandis que chaque instance a ses propres valeurs uniques pour les attributs name et age.
Vous avez également exécuté le script class_attributes.py et vérifié la sortie, confirmant que les attributs de classe sont accessibles de la même manière que les attributs d'instance, mais qu'ils sont partagés entre toutes les instances de la classe.



