Table des matières[Cacher][Montrer]
Dans cette conférence, nous en apprendrons davantage sur les classes, les constructeurs et l'héritage en python.
Ces concepts sont vraiment importants dans un grand programme où différents types doivent être définis.
Cours
Les classes sont essentielles en programmation et elles ne sont pas spécifiques à python. Beaucoup d'autres langages de programmation soutenir la notion de classes. Nous utilisons des classes pour définir de nouveaux types de données.
Jusqu'à présent, nous avons appris les types de données de base en Python comme les nombres, les chaînes et les booléens. Ce sont les types de données de base ou simples en Python. Nous avons également vu quelques types de données complexes comme des listes et des dictionnaires.
Bien que ces types soient extrêmement utiles, ils ne peuvent pas toujours être utilisés pour modéliser des concepts complexes. Par exemple, pensez à l'idée d'un point ou d'un panier. Un panier n'est pas un booléen ou une liste. C'est un autre type de données. Nous pouvons donc utiliser des classes pour définir de nouveaux types afin de modéliser des concepts réels.
Maintenant, définissons un nouveau type de données appelé point. Ce nouveau type va avoir des méthodes comme nous l'avons vérifié auparavant.
Voici comment vous procéderez :
Nous commençons par définir une classe en utilisant le mot-clé "class" et juste après, nous donnons un nom à notre classe.
class Point
Maintenant, regardez la convention de dénomination que j'ai utilisée ici. J'ai mis la première lettre en majuscule ici, c'est ce que nous appelons une convention de nommage pascal. Cette convention est différente de celle que nous utilisons pour nommer nos variables et fonctions pour lesquelles nous utilisons toujours des lettres minuscules et séparons plusieurs mots à l'aide d'un trait de soulignement. Mais lorsque nous nommons des classes, nous n'utilisons pas de trait de soulignement pour séparer plusieurs mots, nous mettons en majuscule la première lettre de chaque mot.
Après avoir défini notre classe, deux-points sont utilisés, ce qui signifie qu'un bloc est maintenant défini.
class Point:
def move (self):
Dans ce bloc, nous pouvons définir toutes les fonctions ou méthodes qui appartiennent aux points. Par exemple, nous pouvons définir une fonction appelée "move" pour déplacer un point. Notez que dès que nous tapons une parenthèse ouvrante, PyCharm ajoute automatiquement "self" ici. Il s'agit d'un mot-clé spécial et permettez-moi d'y revenir sous peu. Écrivons "move" sur le terminal.
print("move")
Définissons une autre méthode comme "dessiner" et imprimons-la sur le terminal.
def draw(self):
print("draw")
Nous en avons terminé avec la définition de notre classe "point". Avec ce nouveau type, nous pouvons créer de nouveaux objets. Une classe définit simplement le plan ou le modèle pour créer des objets qui sont les instances réelles basées sur ce plan. Pour créer un objet, nous tapons le nom de notre classe, puis nous l'appelons comme une fonction. Cela crée un nouvel objet, puis le renvoie. Ensuite, nous pouvons stocker cet objet dans une variable. Laisse moi te montrer:
Ici, nous avons défini un "point1" qui est un point tridimensionnel. Vous pouvez le voir, nous pouvons imprimer des coordonnées individuelles sur le terminal.
Nous pouvons utiliser les deux méthodes "dessiner" et "déplacer" avec ce point.
Donc pour récapituler, nous utilisons des classes pour définir de nouveaux types et ces types peuvent avoir des méthodes que nous définissons dans le corps de la classe. Les classes peuvent avoir des attributs que nous pouvons définir n'importe où dans nos programmes.
Constructeurs
Jusqu'à présent, nous avons appris à créer de nouveaux types à l'aide de classes. Maintenant, il y a un petit problème avec cette implémentation. Nous pouvons créer un objet ponctuel sans coordonnée x ou y en utilisant des classes et ce n'est pas idéal. Laisse moi te montrer.
Créons un point et imprimons-le avant de définir la coordonnée x. L'exécution de notre programme entraîne une erreur d'attribut comme celle-ci :
Cela signifie que l'objet point n'a pas d'attribut appelé x. Maintenant, le problème est qu'il est possible d'avoir un objet ponctuel sans coordonnées x ou y. Cela n'a pas de sens car chaque fois que nous parlons d'un point, nous devons savoir où se trouve ce point. Pour résoudre ce problème, nous utilisons un constructeur. Un constructeur est une fonction appelée au moment de la création d'un objet.
Voici comment nous utilisons un constructeur. Tout d'abord, passons les valeurs des coordonnées x et y dans le programme ci-dessus.
point = Point(10, 20)
print(point.x)
Maintenant, nous devons ajouter une méthode spéciale dans cette classe appelée constructeur. Sa syntaxe est la suivante :
def __init__(self, x, y):
init
est l'abréviation de initialisé, et c'est la fonction ou la méthode qui est appelée lorsqu'un nouvel objet point est créé. Les x et y sont ajoutés juste après self
pour ajouter deux paramètres supplémentaires.
Après cela, nous devrions mapper les x et y aux valeurs transmises, c'est-à-dire 10 et 20
self.x = x
self.y = y
Nous utilisons les self
pour faire référence à l'objet courant, puis nous définissons l'attribut x sur l'argument x passé à la fonction "x". De cette façon, en utilisant init
méthode, nous pouvons initialiser nos objets. Cette méthode est appelée constructeur. Exécutons notre programme.
Maintenant, nous pouvons changer les coordonnées x et y plus tard. Mettons à jour la coordonnée x :
point = Point(10, 20)
point.x = 11
print(point.x)
Maintenant, la coordonnée x est mise à jour à la valeur 11.
Exercises
Voici un exercice intéressant pour vous.
Je veux que vous définissiez un nouveau type appelé une personne. Ces objets "Personne" doivent avoir un "name
" attribut ainsi qu'un "talk()
" méthode.
C'est une tâche simple et ne devrait pas prendre plus de quelques minutes.
Solution
Commencez par définir la classe "Personne" comme ceci :
class Person:
self.name = name
Nous définirons le constructeur plus tard. Maintenant, nous pouvons créer l'objet "Personne". Appelons-le Jean
john = Person("John Smith")
print(john.name)
john.talk()
Maintenant, passez à la première partie du code et créez un constructeur.
def __init__(self, name):
Le code final ressemblera à ceci :
Vous pouvez également utiliser des chaînes formatées et d'autres concepts conjointement avec des classes et des constructeurs.
Droit des successions
L'héritage est un autre concept associé aux classes qui permettent de réutiliser un code.
Considérez ce morceau de code.
class Dog:
def walk(self):
print("walk")
Nous avons créé une classe « Dog » avec une méthode « walk ». Dans cette méthode, nous imprimons simplement le message de marche sur le terminal. Disons que dans un vrai programme, il y a 10 lignes de code au lieu d'une seule ligne ici. À l'avenir, si une autre classe est nécessaire pour avoir la méthode "walk", nous devrons répéter tout ce code. Ce n'est pas idéal.
En programmation, nous avons un principe appelé DRY qui est l'abréviation de ne vous répétez pas. Disons que dans le futur, nous découvrons un problème avec notre méthode "marcher" et si nous avons répété ou dupliqué cette méthode dans de nombreux autres endroits, nous devrons revenir et résoudre ce problème dans chaque endroit où nous avons dupliqué ceci code. C'est pourquoi, en programmation, nous ne devrions pas définir quelque chose deux fois.
Il existe différentes approches pour remédier à ce problème mais ici nous allons apprendre celle qui est la plus facile pour les débutants et qui s'appelle l'héritage. Dans ce cas, nous allons créer une autre classe "mammifère" et définir notre attribut "promenade" dans cette classe.
class Mammal:
def walk(self):
print("walk")
Après avoir défini notre classe "Mammifère", nous pouvons utiliser l'héritage pour passer les attributs comme ceci :
Les classes chien et chat héritent de toutes les méthodes de classe définies dans leur classe parent. Maintenant, nous pouvons ajouter des méthodes spécifiques aux chiens comme celle-ci :
class Dog:
def bark(self):
print("bark")
Emballer!
Il s'agissait des classes, des constructeurs et de la réutilisation du code dans des classes avec des concepts d'héritage. Nous approchons maintenant de la fin de notre série. À ce stade, vous devriez être en mesure de produire de bons codes lisibles et concis en Python.
Nous verrons le concept de modules et de packages dans le prochain cours.
Soyez sympa! Laissez un commentaire