Classes et objets Python (avec exemples)

Dans ce didacticiel, vous découvrirez les fonctionnalités de base des objets et des classes Python. Vous apprendrez ce qu'est une classe, comment la créer et l'utiliser dans votre programme.

Vidéo: classes et objets Python

Objets et classes Python

Python est un langage de programmation orienté objet. Contrairement à la programmation orientée procédure, où l'accent est principalement mis sur les fonctions, la programmation orientée objet met l'accent sur les objets.

Un objet est simplement une collection de données (variables) et de méthodes (fonctions) qui agissent sur ces données. De même, une classe est un plan pour cet objet.

On peut considérer la classe comme une esquisse (prototype) d'une maison. Il contient tous les détails sur les sols, les portes, les fenêtres, etc. Sur la base de ces descriptions, nous construisons la maison. La maison est l'objet.

Comme de nombreuses maisons peuvent être fabriquées à partir du plan d'une maison, nous pouvons créer de nombreux objets à partir d'une classe. Un objet est également appelé instance d'une classe et le processus de création de cet objet est appelé instanciation .

Définition d'une classe en Python

Tout comme les définitions de fonction commencent par le mot-clé def en Python, les définitions de classe commencent par un mot-clé de classe.

La première chaîne à l'intérieur de la classe s'appelle docstring et contient une brève description de la classe. Bien que non obligatoire, cela est fortement recommandé.

Voici une définition de classe simple.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Une classe crée un nouvel espace de noms local dans lequel tous ses attributs sont définis. Les attributs peuvent être des données ou des fonctions.

Il contient également des attributs spéciaux qui commencent par des doubles traits de soulignement __. Par exemple, __doc__nous donne la docstring de cette classe.

Dès que nous définissons une classe, un nouvel objet de classe est créé avec le même nom. Cet objet de classe nous permet d'accéder aux différents attributs ainsi que d'instancier de nouveaux objets de cette classe.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Production

 10 Ceci est une classe de personne

Créer un objet en Python

Nous avons vu que l'objet de classe pouvait être utilisé pour accéder à différents attributs.

Il peut également être utilisé pour créer de nouvelles instances d'objet (instanciation) de cette classe. La procédure de création d'un objet est similaire à un appel de fonction.

 >>> harry = Person()

Cela créera une nouvelle instance d'objet nommée harry. Nous pouvons accéder aux attributs des objets en utilisant le préfixe de nom d'objet.

Les attributs peuvent être des données ou une méthode. Les méthodes d'un objet sont des fonctions correspondantes de cette classe.

Cela signifie que, puisque Person.greetc'est un objet fonction (attribut de classe), Person.greetsera un objet méthode.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Production

  Bonjour 

Vous avez peut-être remarqué le selfparamètre dans la définition de fonction à l'intérieur de la classe, mais nous avons appelé la méthode simplement comme harry.greet()sans aucun argument. Cela fonctionnait toujours.

C'est parce que, chaque fois qu'un objet appelle sa méthode, l'objet lui-même est passé comme premier argument. Donc, se harry.greet()traduit par Person.greet(harry).

En général, appeler une méthode avec une liste de n arguments équivaut à appeler la fonction correspondante avec une liste d'arguments créée en insérant l'objet de la méthode avant le premier argument.

Pour ces raisons, le premier argument de la fonction dans la classe doit être l'objet lui-même. Ceci est conventionnellement appelé soi. Il peut être nommé autrement mais nous vous recommandons vivement de suivre la convention.

Vous devez maintenant être familiarisé avec l'objet de classe, l'objet d'instance, l'objet de fonction, l'objet de méthode et leurs différences.

Constructeurs en Python

Les fonctions de classe qui commencent par un double trait de soulignement __sont appelées fonctions spéciales car elles ont une signification particulière.

La fonction présente un intérêt particulier __init__(). Cette fonction spéciale est appelée chaque fois qu'un nouvel objet de cette classe est instancié.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Tout attribut d'un objet peut être supprimé à tout moment, à l'aide de l' delinstruction. Essayez ce qui suit sur le shell Python pour voir la sortie.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Nous pouvons même supprimer l'objet lui-même, en utilisant l'instruction del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

En fait, c'est plus compliqué que ça. Lorsque nous le faisons c1 = ComplexNumber(1,3), un nouvel objet d'instance est créé en mémoire et le nom c1 s'y lie.

Sur la commande del c1, cette liaison est supprimée et le nom c1 est supprimé de l'espace de noms correspondant. L'objet continue cependant d'exister en mémoire et si aucun autre nom ne lui est lié, il est ensuite automatiquement détruit.

Cette destruction automatique d'objets non référencés en Python est également appelée garbage collection.

La suppression d'objets dans Python supprime la liaison de nom

Articles intéressants...