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. Python: tout n’est qu’objet
  • 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

On this page

  • Chapitre 4 - Python et les objets : Une approche générale
    • 1. Le concept “Tout est objet” en Python
      • 1.1 Implications du “Tout est objet”
      • 1.2 Exemple concret
    • 2. Objets de base vs objets en C++
      • 2.1 Représentation en mémoire
      • 2.2 Implications sur les performances
      • 2.3 Exemple
    • 3. Flexibilité et dynamisme
      • 3.1 Typage dynamique
      • 3.2 Exemple de flexibilité
    • 4. Introspection et réflexion
      • 4.1 Exemple d’introspection
    • 5. Implications sur la programmation
      • 5.1 Uniformité
      • 5.2 Extensibilité
      • 5.3 Exemple d’extensibilité
    • 6. Compromis : Simplicité vs Performance
    • Conclusion

Python: tout n’est qu’objet

Cours
Introduction
Explorer la notion de PATH, un élément essentiel dans la configuration des environnements de développement.
Author

Remi Genet

Published

2024-10-21

Chapitre 4 - Python et les objets : Une approche générale


1. Le concept “Tout est objet” en Python

En Python, absolument tout est un objet. Cette philosophie est fondamentale et distingue Python de nombreux autres langages de programmation.

1.1 Implications du “Tout est objet”

  • Même les types de base (int, float, str) sont des objets
  • Les fonctions sont des objets
  • Les classes sont des objets
  • Les modules sont des objets

1.2 Exemple concret

2. Objets de base vs objets en C++

2.1 Représentation en mémoire

  • En C++, un int ou un float a une taille fixe et prédéfinie
  • En Python, même un simple entier est un objet complet avec des métadonnées

2.2 Implications sur les performances

  • Opérations plus coûteuses en Python (plus d’indirections)
  • Pas de risque d’overflow/underflow pour les entiers en Python (entiers de taille arbitraire)

2.3 Exemple

3. Flexibilité et dynamisme

3.1 Typage dynamique

  • Les variables n’ont pas de type fixe
  • Le type est lié à l’objet, pas à la variable

3.2 Exemple de flexibilité

4. Introspection et réflexion

Comme tout est objet, Python offre de puissantes capacités d’introspection.

4.1 Exemple d’introspection

5. Implications sur la programmation

5.1 Uniformité

  • Syntaxe cohérente pour manipuler différents types d’objets
  • Facilite l’apprentissage et l’utilisation du langage

5.2 Extensibilité

  • Possibilité de créer des types personnalisés qui se comportent comme des types intégrés

5.3 Exemple d’extensibilité

6. Compromis : Simplicité vs Performance

  • La nature “tout objet” de Python simplifie de nombreux concepts
  • Cependant, cela a un coût en termes de performance et d’utilisation mémoire
  • Python privilégie la lisibilité et la facilité de développement sur la performance brute

Conclusion

L’approche “tout est objet” de Python offre une grande cohérence et flexibilité, mais avec un compromis sur les performances. Cette philosophie permet aux développeurs de se concentrer sur la logique de leur programme plutôt que sur les détails de bas niveau, rendant Python particulièrement adapté au prototypage rapide et au développement d’applications où la vitesse de développement prime sur l’efficacité d’exécution.

Back to top
Naissance de la POO
Python : Simplicité des objets et performance sous-jacente

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