Programmation Orientée Objet en Python
  • Back to Main Website
  • Home
  • Introduction: Histoire et Concepts
    • Introduction: Histoire et Concepts
    • Histoire de la programmation
    • Première Structuration des données
    • Naissance de la POO
    • Python: tout n’est qu’objet
    • Python : Simplicité des objets et performance sous-jacente
    • Classes en Python : Concepts fondamentaux

    • Travaux Pratiques
    • Construire sa propre Liste
    • Construire son propre DataFrame
  • Encapsulation, Héritage, Composition et Dunder
    • Encapsulation, Heritage, Composition et Dunder
    • Encapsulation en Python
    • Héritage en Python : Concept et intérêt
    • Héritage vs Composition
    • Méthodes Dunder en Python
    • Python call Method: A Fun Exploration

    • Travaux Pratiques
    • TP: Heritage avec le pricing d’option
    • TP : Ajouter des méthodes dunder à DataFrameSimple
    • TP : Étendre la classe Liste avec des méthodes dunder
    • TP: Dunder Method with Tensor for Automatic Differentiation
  • Polymorphisme et Surcharge
    • Polymorphisme et Surcharge
    • Polymorphism in Object-Oriented Programming
    • Polymorphism in Python: Function Overloading and Type Checking
    • Class Creation: Standard vs type()
    • Type Hinting, Typing Module, and Linters in Python
    • Abstract Classes
    • Protocol Classes

    • Travaux Pratiques
    • TP
  • Decorators
    • Design Patterns
    • The decorator pattern
    • Decorator Practically
    • Built-in Decorators and Standard Library Decorators in Python
    • Practical Decorators in Python Libraries

    • Travaux Pratiques
    • TP: Monte Carlo Option Pricing with Decorators
    • TP: Optimizing Heston Model Monte Carlo Simulation
  • Project Management and Packaging
    • Project and Package
    • Organizing Python Projects
    • Understanding imports
    • Python Package Management and Virtual Environments
    • Unit Testing in Python

    • Travaux Pratiques
    • TP: Creating a Linear Regression Package
  • Design Patterns
    • OOP Design Patterns
    • Python-Specific Design Patterns
    • Creation Design Patterns
    • Structural Design Patterns
    • Behavioral Design Pattern

    • Travaux Pratiques
    • TP
  • Sujets de Projets possibles
    • Projets
    • Projets POO - 2024-2025
  • Code source
  1. Travaux Pratiques
  2. TP : Ajouter des méthodes dunder à DataFrameSimple
  • Encapsulation, Heritage, Composition et Dunder
  • Encapsulation en Python
  • Héritage en Python : Concept et intérêt
  • Héritage vs Composition
  • Méthodes Dunder en Python
  • Python call Method: A Fun Exploration
  • Travaux Pratiques
    • TP: Heritage avec le pricing d’option
    • TP : Ajouter des méthodes dunder à DataFrameSimple
    • TP : Étendre la classe Liste avec des méthodes dunder
    • TP: Dunder Method with Tensor for Automatic Differentiation

On this page

  • Instructions
  • Implémentation
  • Tests Unitaires pour vérifier votre implémentation
  1. Travaux Pratiques
  2. TP : Ajouter des méthodes dunder à DataFrameSimple

TP : Ajouter des méthodes dunder à DataFrameSimple

TP
Programmation Orientée Objet
Author

Remi Genet

Published

2024-10-21

Instructions

Dans ce TP, vous allez étendre la classe DataFrameSimple en y ajoutant des méthodes dunder (double underscore) pour implémenter des opérations avancées. Cela vous permettra de comprendre comment ces méthodes spéciales peuvent rendre vos objets plus puissants et flexibles.

Voici la classe DataFrameSimple de base :

import numpy as np

class DataFrameSimple:
    def __init__(self, data):
        self.donnees = np.array(list(data.values())).T
        self.colonnes = list(data.keys())

    def afficher(self):
        header = " ".join(f"{col:>10}" for col in self.colonnes)
        rows = [" ".join(f"{val:10}" for val in row) for row in self.donnees[:5]]
        return "\n".join([header] + rows)

    def moyenne(self, nom_colonne):
        return np.mean(self.select_colonne(nom_colonne))

    def somme(self, nom_colonne):
        return np.sum(self.select_colonne(nom_colonne))

    def min(self, nom_colonne):
        return np.min(self.select_colonne(nom_colonne))

    def max(self, nom_colonne):
        return np.max(self.select_colonne(nom_colonne))

    def select_colonne(self, nom_colonne):
        index = self.colonnes.index(nom_colonne)
        return self.donnees[:, index]

Votre tâche est d’ajouter les méthodes dunder suivantes à cette classe :

  1. __str__(self) : Retourne une représentation en chaîne de caractères du DataFrame.
  2. __len__(self) : Retourne le nombre de lignes du DataFrame.
  3. __getitem__(self, key) : Permet l’accès aux colonnes par nom (ex: df['colonne']).
  4. __setitem__(self, key, value) : Permet de modifier une colonne par nom (ex: df['colonne'] = [1, 2, 3]).
  5. __iter__(self) : Permet d’itérer sur les noms de colonnes du DataFrame.
  6. __add__(self, other) : Permet d’additionner le DataFrame avec un scalaire (int, float, np.float_) ou un autre DataFrame.

Pour la méthode __add__, suivez ces règles : - Si other est un scalaire (int, float, np.float_), ajoutez-le à toutes les valeurs numériques du DataFrame. - Si other est un autre DataFrame, additionnez les valeurs correspondantes si les dimensions et les noms de colonnes correspondent. - Si other est un numpy array de même dimension que les données, additionnez-le élément par élément. - Pour tout autre type, levez une exception TypeError.

Implémentation

Complétez la classe DataFrameSimple ci-dessous en ajoutant les méthodes dunder demandées :

Tests Unitaires pour vérifier votre implémentation

Exécutez les tests unitaires ci-dessous pour vérifier votre implémentation :

Back to top
TP: Heritage avec le pricing d’option
TP : Étendre la classe Liste avec des méthodes dunder

Programmation Orienté Object en Python, Rémi Genet.
Licence
Code source disponible sur Github

 

Site construit avec et Quarto
Inspiration pour la mise en forme du site ici
Code source disponible sur GitHub