Programmation Python : Cours 4

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Que se passe-t-il si une méthode increment ne contient pas de déclaration de retour explicite?

  • La méthode retourne la valeur de l'objet modifié.
  • Une exception est levée.
  • La méthode retourne une erreur de compilation.
  • La méthode retourne `None`. (correct)

L'utilisation d'attributs publics est toujours préférable car cela simplifie la modification des attributs depuis l'extérieur de la classe.

False (B)

Comment peut-on obtenir un comportement différent de celui par défaut lors de la comparaison de deux objets en utilisant l'opérateur == en Python?

redéfinir la méthode __eq__

Le décorateur ______ est utilisé pour définir une méthode qui est liée à la classe et non à l'instance de la classe.

<p><code>@classmethod</code></p> Signup and view all the answers

Quelle est la principale différence entre une méthode de classe et une méthode statique?

<p>Les méthodes de classe peuvent accéder et modifier l’état de la classe, tandis que les méthodes statiques ne le peuvent pas. (B)</p> Signup and view all the answers

Si la méthode __eq__ est définie, mais pas la méthode __ne__, Python supposera que __ne__ est simplement la négation de __eq__.

<p>True (A)</p> Signup and view all the answers

Dans le contexte des méthodes arithmétiques en Python, quel est le rôle de self et other dans la méthode __add__(self, other)?

<p><code>self</code> représente l'opérande de gauche et <code>other</code> représente l'opérande de droite</p> Signup and view all the answers

Quelle est la différence entre isinstance() et type() lors de la vérification du type d'un objet?

<p><code>type()</code> vérifie uniquement le type exact, tandis que <code>isinstance()</code> vérifie si l'objet est une instance de la classe ou de ses sous-classes. (B)</p> Signup and view all the answers

Pour trier une liste d'objets personnalisés en Python, on peut utiliser la fonction sorted() en conjonction avec la méthode ______ de comparaison.

<p><code>__lt__</code></p> Signup and view all the answers

Associez les méthodes spéciales aux opérateurs qu'elles permettent de surcharger:

<p><code>__add__(self, other)</code> = Surcharge l'opérateur + <code>__sub__(self, other)</code> = Surcharge l'opérateur - <code>__mul__(self, other)</code> = Surcharge l'opérateur * <code>__lt__(self, other)</code> = Surcharge l'opérateur &lt;</p> Signup and view all the answers

Que retourne la méthode increment de la classe Counter si elle ne contient pas de return?

<p><code>None</code>. (D)</p> Signup and view all the answers

Dans le contexte de la comparaison d'objets, que signifie self et other lors de l'appel à la méthode get_travel_distance avec 12.get_travel_distance(11)?

<p><code>self</code> représente l'instance <code>12</code> et <code>other</code> représente l'instance <code>11</code>. (D)</p> Signup and view all the answers

Que se passe-t-il si vous tentez de définir l'attribut age d'un objet Individu à une valeur négative, en utilisant la méthode set_age?

<p>Une exception <code>ValueError</code> est levée. (D)</p> Signup and view all the answers

La comparaison par défaut (==) de deux objets en Python retourne True si et seulement si les deux objets occupent le même espace mémoire.

<p>True (A)</p> Signup and view all the answers

Comment peut-on redéfinir l'égalité entre deux objets en Python?

<p>En implémentant la méthode <code>__eq__</code> dans la classe des objets.</p> Signup and view all the answers

La méthode spéciale utilisée pour définir le comportement de l'opérateur < est ___.

<p><strong>lt</strong></p> Signup and view all the answers

Quelle est la principale utilisation de la méthode de comparaison __lt__?

<p>Définir l'opérateur inférieur à (<code>&lt;</code>) pour les objets. (D)</p> Signup and view all the answers

Lors de la redéfinition de l'addition avec la méthode __add__, si l'opérande de gauche ne possède pas la méthode __add__ appropriée, Python ne tentera pas d'utiliser la méthode __radd__ de l'opérande de droite.

<p>False (B)</p> Signup and view all the answers

Comment déclare-t-on une méthode qui appartient à la classe elle-même plutôt qu'à une instance particulière de cette classe?

<p>En utilisant le décorateur <code>@classmethod</code>.</p> Signup and view all the answers

Faites correspondre les types de méthodes aux descriptions appropriées:

<p>Méthode d'instance = Opère sur une instance spécifique de la classe et reçoit <code>self</code> comme premier argument. Méthode de classe = Reçoit la classe elle-même comme premier argument (<code>cls</code>) et peut accéder ou modifier l'état de la classe. Méthode statique = Ne reçoit ni l'instance (<code>self</code>) ni la classe (<code>cls</code>) comme argument et se comporte comme une fonction ordinaire.</p> Signup and view all the answers

Quelle est la conséquence principale de l'utilisation d'attributs publics au lieu d'attributs privés dans une classe?

<p>n’importe qui peut modifier les attributs de la manière dont il le souhaite. (A)</p> Signup and view all the answers

La comparaison par défaut (==) entre deux objets en Python vérifie si les objets ont le même contenu, pas si ils se trouvent au même emplacement mémoire.

<p>False (B)</p> Signup and view all the answers

Si vous souhaitez redéfinir l'opérateur d'addition (+) pour une classe personnalisée, quelle méthode spéciale devez-vous implémenter dans cette classe?

<p><strong>add</strong></p> Signup and view all the answers

Lors de la redéfinition des opérateurs de comparaison, la méthode spéciale _____ est utilisée pour définir le comportement de l'opérateur inférieur à (<).

<p><strong>lt</strong></p> Signup and view all the answers

Associez les méthodes spéciales aux opérateurs qu'elles redéfinissent:

<p><strong>eq</strong> = == <strong>ne</strong> = != <strong>lt</strong> = &lt; <strong>gt</strong> = &gt;</p> Signup and view all the answers

Quelle est la principale différence entre une méthode de classe et une méthode statique en Python?

<p>Les méthodes de classe peuvent accéder et modifier l'état de la classe, tandis que les méthodes statiques ne le peuvent pas. (B)</p> Signup and view all the answers

Une méthode statique peut accéder et modifier les attributs d'instance de la classe.

<p>False (B)</p> Signup and view all the answers

Quel décorateur est utilisé pour définir une méthode de classe en Python?

<p>@classmethod</p> Signup and view all the answers

Si vous avez deux instances d'une classe, obj1 et obj2, et qu'une variable de classe var est modifiée via obj1, quel sera l'impact sur obj2?

<p><code>obj2.var</code> reflétera la nouvelle valeur. (D)</p> Signup and view all the answers

Lors de la définition d'une méthode de classe, le premier argument de cette méthode est conventionnellement nommé _____.

<p>cls</p> Signup and view all the answers

Flashcards

Comparaison par défaut (==)

Renvoie True si les objets correspondent au même espace mémoire.

Méthode de comparaison LT

Méthode spéciale pour définir le comportement de l'opérateur < pour les objets d'une classe.

Méthode add

Permet de redéfinir l'addition (+) pour les objets.

Attributs de classe

Attributs partagés par toutes les instances d'une classe.

Signup and view all the flashcards

Méthodes de classe

Méthodes appelées sur la classe elle-même, pas sur une instance.

Signup and view all the flashcards

Méthodes statiques

Méthodes indépendantes de l'état de l'objet ou de la classe.

Signup and view all the flashcards

X = Expression 1 si condition, sinon Expression 2

Si la condition est vraie, X prend la valeur de l'expression 1, sinon, X prend la valeur de l'expression 2.

Signup and view all the flashcards

Fonction isinstance()

Vérifie si un objet est une instance d'une classe spécifique.

Signup and view all the flashcards

Que font les méthodes de classe?

Elles manipulent les attributs de classe et sont précédées de @classmethod.

Signup and view all the flashcards

Méthode lt

Utilisé pour la comparaison 'inférieur à' (<) entre deux objets.

Signup and view all the flashcards

Deepcopy

Deepcopy permet de dupliquer une liste et les objets qu'elles contiennent

Signup and view all the flashcards

Redéfinir l'égalité (==)

Définir l'égalité pour les objets personnalisés.

Signup and view all the flashcards

Les méthodes statiques

Méthodes qui ne dépendent ni de l'état de l'objet ni de la classe, souvent des utilitaires.

Signup and view all the flashcards

Comparaison par default (==)

Retourne True si les objets pointent vers le même espace mémoire

Signup and view all the flashcards

Study Notes

  • Cours 4 porte sur la programmation Python.

Quiz

  • La méthode increment ne retourne rien, elle modifie l'objet en place, c'est un effet de bord, l'objet est modifié mais rien ne sera envoyé.
  • Dans le deuxième quiz, self est égal à I2 et other est égal à I1, car I2 précède get, correspondant à self, et I1 est le paramètre, correspondant à other.
  • John = individu() retourne 0 car il n'y a pas de paramètre.
  • John.set_age(3) remplace l'âge par 3, car 3 est supérieur à 0.
  • John.age = -1 remplace l'âge par -1, ce qui n'est pas conforme au code écrit.
  • L'utilisation d'attributs publics permet à quiconque de les modifier, il est donc préférable d'utiliser des attributs privés.
  • X = Expression1 if condition else Expression2 est équivalent à :
if condition:
    X = Expression1
else:
    X = expression2

Les méthodes de comparaison

  • Par défaut, la comparaison (==) de deux objets retourne True uniquement s'ils occupent le même espace mémoire (même objet).
  • Par défaut, l'addition (+) de deux objets n'est pas définie
  • Quand on créé des objets, l'égalité est directement définie
  • Par défaut, la double égalité est attribuée par défaut.
  • Comparaison de deux instances différentes, même avec les mêmes attributs
  • les méthodes isinstance est nécessaire pour vérifier les operateurs avec une condition
  • if/elif rend le code plus lisible et intuitif, et adapte automatiquement le comportement des fonctions classiques utilisant les opérateurs.
  • La redéfinition de l'égalité s'écrit sous la forme a == b → a.__eq__(b) → a = self b = other.
  • Python suppose un lien entre eq et ne (__ne__ = not __eq__), mais on peut imposer un autre comportement en redéfinissant les deux.
  • Les méthodes sont utilisées pour == et !=, mais aussi pour in, etc.

Méthode de comparaison LT

  • La méthode de comparaison __lt__ (Less Than, "inférieur à") en Python est une méthode spéciale utilisée pour définir le comportement de l'opérateur < lorsqu'il est appliqué à des objets d'une classe personnalisée.
  • Elle permet de comparer deux objets en spécifiant ce qui signifie "être plus petit" pour ces objets.
  • __lt__ est utile pour :
  • Trier des objets dans une liste avec sorted() ou list.sort().
  • Comparer des objets personnalisés dans des structures de données comme les ensembles ordonnés ou les arbres binaires de recherche.
  • Utiliser des objets dans des algorithmes nécessitant un ordre, comme des files de priorité.
  • Ces méthodes sont utilisées pour >=, <=, min(), max(), sorted().
  • Ainsi, toutes les méthodes qui seront liées à l'opération seront modifiées.

Les méthodes arithmétiques

  • def __add__(self, other) permet de redéfinir l'addition sur des objets.
  • Cette méthode est utilisée pour l'opérateur +: x + y ⇒ x.__add__(y).
  • Il ne faut pas oublier de préciser if instance(other, ...)
  • La méthode de l'opérande de gauche est appliquée.
  • Si elle existe, elle appelle x.add(y) ; dans la méthode add, self vaut x, other vaut y.
  • Si elle existe il appelle y.radd(x) ; dans la méthode radd, self vaut y, other vaut x. Sinon, on créé une exception avec NotImplemented
class MaClasse():
def f(self, x):
    # plusieurs manières d'appeler f
    o.f(y) # à préférer
    # un obj. le nom de la methode(parametre)
    type(o).f(o, y)
    # ou MaClasse.f(o, y)
    #attention à l'héritage
    o._class_.f(o, y) # apeler une methode d'instance

L'attribut de classe

  • L'attribut de classe est partagé par tous les objets de cette classe.
  • Les attributs de classe appartiennent à la classe, pas à une instance particulière.
  • Ils sont définis dans le corps de la classe et sont accessibles depuis l'intérieur de la classe, sans self, en utilisant le nom de la classe.
  • Ils sont accessibles depuis l'extérieur de la classe, à moins qu'ils ne soient définis comme privés avec _.

Les méthodes de classe

  • Les méthodes de classe ne sont pas appelées sur un objet particulier (une instance) mais sur la classe elle-même.
  • Elles manipulent typiquement des attributs de classe.
  • Elles sont précédées du décorateur @classmethod.
  • Elles prennent en premier argument la classe, que l'on nomme cls (similairement à self pour les méthodes d'instance).
  • Elles peuvent être appelées à partir de la classe directement.

Les méthodes statiques

  • Les méthodes statiques ne dépendent ni d'un objet particulier (d'une instance) ni de la classe.
  • Elles sont précédées du décorateur @staticmethod.
  • Elles sont généralement des méthodes utiles « outil » à l'intérieur de la classe.
@staticmethod #ne dep pas de classe ni de l'instance
def _euclidean(x1, y1, x2, y2):
    return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
  • En règle générale, on utilise des méthodes de classe si on utilise des attributs ou des méthodes de classe, sinon on utilise une méthode statique.
  • Deepcopy permet de dupliquer une liste et les objets qu'elles contiennent.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Use Quizgecko on...
Browser
Browser