Partage de technologie

Explorez la programmation [orientée objet Python] : explication détaillée des paradigmes de programmation avancés dans la nouvelle ère

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Table des matières

1. Concepts de programmation orientée objet (POO)

1.1 Que sont les classes et les objets ?

1.2 Définition de la classe

1.3 Relation entre classes et objets

1.4 Compréhension de Xiao Li

2. Abstraction

2.1 Concepts abstraits

2.2 Classes et méthodes abstraites

2.3 Compréhension de Xiao Li

3. Classes et instances

3.1 Définition et instanciation de classe

3.2 Attributs et méthodes de classe

3.3 Compréhension de Xiao Li

4. Encapsulation/Interface

4.1 Notion d'encapsulation

4.2 Notion d'interface

4.3 Compréhension de Xiao Li

5. Héritage

5.1 La notion d'héritage

5.2 Réécriture de méthode

5.3 Compréhension de Xiao Li

6. Polymorphisme

6.1 La notion de polymorphisme

6.2 Implémenter le polymorphisme

6.3 Compréhension de Xiao Li

7. Introspection/Réflexion

7.1 Le concept d'introspection

7.2 Utiliser l'introspection pour les opérations dynamiques

7.3 Compréhension de Xiao Li

8. Méthodes statiques et méthodes de classe

8.1 Méthodes statiques

8.2 Méthodes de classe

Résumer


 

Colonne : notes d'étude sur Python

Volume précédent : Modularisation Python et gestion des packages

1. Concepts de programmation orientée objet (POO)

Programmation orientée objet (POO) Est un paradigme de programmation mis en œuvre en organisant les programmes en collections d'objets. Les objets contiennent non seulement des données mais également des méthodes permettant de manipuler ces données. Les concepts de base de la POO incluent les classes, les objets, les propriétés et les méthodes.

1.1 Que sont les classes et les objets ?

  • Classe Est un modèle ou un plan utilisé pour créer des objets. Les classes définissent les propriétés et le comportement des objets.
  • Objet Est une instance de la classe. Créer un objet consiste à créer une instance spécifique basée sur la classe.

exemple:

  1. class Dog:
  2. # 类的初始化方法
  3. def __init__(self, name, age):
  4. self.name = name # 属性
  5. self.age = age # 属性
  6. # 方法
  7. def bark(self):
  8. return f"{self.name} says Woof!"
  9. # 创建对象
  10. my_dog = Dog("Rex", 5)
  11. print(my_dog.bark())

1.2 Définition de la classe

En Python, les cours réussissent class Définition des mots-clés. Les fonctions d’une classe sont appelées méthodes et les variables sont appelées propriétés.Les méthodes de classe commencent généralement parself En tant que premier paramètre, représente l'instance elle-même.

exemple:

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says Meow!"
  6. # 创建对象
  7. my_cat = Cat("Whiskers")
  8. print(my_cat.meow())

1.3 Relation entre classes et objets

Une classe est un modèle pour un objet et définit la structure et le comportement de l'objet. Les objets sont des instances de classes et chaque objet possède des propriétés et des méthodes indépendantes.

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def greet(self):
  6. return f"Hello, my name is {self.name} and I am {self.age} years old."
  7. # 创建多个对象
  8. person1 = Person("Alice", 30)
  9. person2 = Person("Bob", 25)
  10. print(person1.greet())
  11. print(person2.greet())

1.4 Compréhension de Xiao Li

Une classe est comme un moule à cookie, elle définit la forme et la taille du cookie. Les objets sont comme des biscuits en béton fabriqués à partir d'un moule. Chaque biscuit peut avoir des saveurs (propriétés) différentes, mais leur forme et leur taille (structure et comportement) sont les mêmes.

2. Abstraction

abstrait Il fait référence à la simplification de problèmes complexes du monde réel en saisissant les principales caractéristiques et en ignorant les détails. En programmation, l'abstraction nous aide à créer un code plus concis et maintenable.

2.1 Concepts abstraits

L'abstraction consiste à extraire les principales caractéristiques d'un objet tout en ignorant les détails sans importance. Grâce à l'abstraction, nous pouvons nous concentrer sur la fonctionnalité principale d'un objet sans être distrait par les fonctionnalités secondaires.

exemple:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def make_sound(self):
  5. pass # 抽象方法,不具体实现
  6. class Dog(Animal):
  7. def make_sound(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def make_sound(self):
  11. return "Meow!"
  12. # 创建对象
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.make_sound())
  16. print(cat.make_sound())

2.2 Classes et méthodes abstraites

En Python, nous pouvons réaliser l'abstraction en définissant des classes abstraites et des méthodes abstraites. Les classes abstraites ne peuvent pas être instanciées, seulement héritées. Les méthodes abstraites sont définies dans la classe abstraite mais implémentées dans des sous-classes.

exemple:

  1. from abc import ABC, abstractmethod
  2. class Vehicle(ABC):
  3. @abstractmethod
  4. def start_engine(self):
  5. pass
  6. class Car(Vehicle):
  7. def start_engine(self):
  8. return "Car engine started"
  9. class Motorcycle(Vehicle):
  10. def start_engine(self):
  11. return "Motorcycle engine started"
  12. # 创建对象
  13. car = Car()
  14. motorcycle = Motorcycle()
  15. print(car.start_engine())
  16. print(motorcycle.start_engine())

2.3 Compréhension de Xiao Li

L'abstraction, c'est comme réduire un tableau complexe à des formes géométriques. Par exemple, un chat spécifique possède de nombreuses caractéristiques (couleur du pelage, taille, âge, etc.), mais nous nous concentrons uniquement sur la caractéristique du miaulement. C'est l'abstraction du chat.

3. Classes et instances

Classes et instances C'est la base de la POO. Les classes sont des modèles et les instances sont des objets concrets. Les instances sont créées à partir d'une classe et possèdent les propriétés et méthodes définies par la classe.

3.1 Définition et instanciation de classe

Définir une classe et créer une instance sont les opérations de base de la POO. Les classes définissent des propriétés et des méthodes, et les instances sont des objets concrets de la classe.

exemple:

  1. class Student:
  2. def __init__(self, name, grade):
  3. self.name = name
  4. self.grade = grade
  5. def introduce(self):
  6. return f"Hi, I am {self.name} and I am in grade {self.grade}."
  7. # 创建实例
  8. student1 = Student("Alice", 10)
  9. student2 = Student("Bob", 12)
  10. print(student1.introduce())
  11. print(student2.introduce())

3.2 Attributs et méthodes de classe

Les attributs d'une classe sont l'état de l'objet et les méthodes sont le comportement de l'objet.Les attributs de classe réussissent__init__ Initialisation de la méthode, la méthode est définie dans la classe.

exemple:

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def get_info(self):
  6. return f"'{self.title}' by {self.author}"
  7. # 创建实例
  8. book = Book("1984", "George Orwell")
  9. print(book.get_info())

3.3 Compréhension de Xiao Li

Les classes et les instances sont comme un dessin d’une maison et d’une maison réelle. Les dessins (classes) définissent la structure et la fonctionnalité de la maison, tandis que la maison réelle (instance) est l'objet concret construit selon les dessins.

4. Encapsulation/Interface

encapsulation Il masque le statut (propriétés) et le comportement (méthodes) de l'objet à l'intérieur de la classe et interagit avec le monde extérieur via l'interface (méthodes). L'encapsulation améliore la sécurité et la maintenabilité du code.

4.1 Notion d'encapsulation

L'encapsulation est l'un des concepts fondamentaux de la POO. Elle protège les données de l'objet en masquant l'état interne de l'objet et en exposant uniquement les interfaces nécessaires. De cette manière, le code externe ne peut pas accéder ou modifier directement l'état interne de l'objet et ne peut manipuler les données que via les méthodes fournies par l'objet.

exemple:

  1. class Account:
  2. def __init__(self, owner, balance=0):
  3. self.owner = owner
  4. self.__balance = balance # 私有属性
  5. def deposit(self, amount):
  6. if amount > 0:
  7. self.__balance += amount
  8. else:
  9. raise ValueError("Deposit amount must be positive")
  10. def withdraw(self, amount):
  11. if 0 < amount <= self.__balance:
  12. self.__balance -= amount
  13. else:
  14. raise ValueError("Insufficient funds or invalid amount")
  15. def get_balance(self):
  16. return self.__balance
  17. # 创建实例
  18. account = Account("John")
  19. account.deposit(100)
  20. print(account.get_balance())

4.2 Notion d'interface

Une interface est le seul moyen par lequel un objet interagit avec le monde extérieur. Grâce aux interfaces, le code externe peut appeler les méthodes de l'objet mais ne peut pas accéder directement à l'état interne de l'objet.

exemple:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.__engine_started = False
  5. def start_engine(self):
  6. if not self.__engine_started:
  7. self.__engine_started = True
  8. return "Engine started"
  9. else:
  10. return "Engine is already running"
  11. def stop_engine(self):
  12. if self.__engine_started:
  13. self.__engine_started = False
  14. return "Engine stopped"
  15. else:
  16. return "Engine is not running"
  17. # 创建实例
  18. car = Car("Toyota")
  19. print(car.start_engine())
  20. print(car.stop_engine())

4.3 Compréhension de Xiao Li

L'emballage est comme le boîtier d'un téléphone portable. Les circuits et composants (état de l'objet) à l'intérieur du téléphone mobile sont encapsulés dans le boîtier. L'utilisateur ne peut interagir avec le téléphone mobile que via les boutons et l'écran (interface), mais ne peut pas contacter directement les composants internes.

5. Héritage

hériter Est un autre concept central de la POO, qui nous permet de créer une nouvelle classe basée sur une classe existante. La nouvelle classe hérite de toutes les propriétés et méthodes de la classe existante.

5.1 La notion d'héritage

L'héritage se produit lorsqu'une classe (sous-classe) obtient des propriétés et des méthodes d'une autre classe (classe parent). Grâce à l'héritage, les sous-classes peuvent réutiliser le code de la classe parent, ajouter de nouvelles propriétés et méthodes ou remplacer les méthodes de la classe parent.

exemple:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def speak(self):
  11. return "Meow!"
  12. # 创建实例
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.speak())
  16. print(cat.speak())

5.2 Réécriture de méthode

Une sous-classe peut remplacer la méthode de la classe parent, c'est-à-dire définir une méthode portant le même nom que la classe parent dans la sous-classe pour réaliser différentes fonctions.

exemple:

  1. class Shape:
  2. def area(self):
  3. return 0
  4. class Rectangle(Shape):
  5. def __init__(self, width, height):
  6. self.width = width
  7. self.height = height
  8. def area(self):
  9. return self.width * self.height
  10. class Circle(Shape):
  11. def __init__(self, radius):
  12. self.radius = radius
  13. def area(self):
  14. return 3.14 * (self.radius ** 2)
  15. # 创建实例
  16. rectangle = Rectangle(3, 4)
  17. circle = Circle(5)
  18. print(rectangle.area())
  19. print(circle.area())

5.3 Compréhension de Xiao Li

L'héritage est comme un héritage donné par les parents à leurs enfants. Les parents (classe parent) transmettent leurs propriétés (propriétés et méthodes) à leurs enfants (sous-classes), et les enfants peuvent non seulement utiliser ces propriétés, mais aussi s'enrichir grâce à leurs propres efforts (en ajoutant de nouvelles propriétés et méthodes).

6. Polymorphisme

Polymorphisme Cela signifie que la même méthode a des manifestations différentes sur différents objets. Le polymorphisme nous permet d'appeler des méthodes de différents objets via la même interface pour réaliser différentes fonctions.

6.1 La notion de polymorphisme

Le polymorphisme est l'une des fonctionnalités importantes de la POO. Il pointe vers des objets de sous-classe via des références de classe parent, permettant à la même méthode d'avoir différentes implémentations. Le polymorphisme augmente la flexibilité et l'évolutivité du code.

exemple:

  1. class Animal:
  2. def speak(self):
  3. pass
  4. class Dog(Animal):
  5. def speak(self):
  6. return "Woof!"
  7. class Cat(Animal):
  8. def speak(self):
  9. return "Meow!"
  10. def animal_sound(animal):
  11. print(animal.speak())
  12. # 创建实例
  13. dog = Dog()
  14. cat = Cat()
  15. animal_sound(dog)
  16. animal_sound(cat)

 

6.2 Implémenter le polymorphisme

En Python, le polymorphisme est généralement implémenté via le remplacement de méthode et les références à la classe parent. En pointant vers l'objet de sous-classe via la référence de classe parent, vous pouvez appeler la méthode de sous-classe.

exemple:

  1. class Shape:
  2. def draw(self):
  3. pass
  4. class Rectangle(Shape):
  5. def draw(self):
  6. return "Drawing a rectangle"
  7. class Circle(Shape):
  8. def draw(self):
  9. return "Drawing a circle"
  10. def draw_shape(shape):
  11. print(shape.draw())
  12. # 创建实例
  13. rectangle = Rectangle()
  14. circle = Circle()
  15. draw_shape(rectangle)
  16. draw_shape(circle)

 

6.3 Compréhension de Xiao Li

Le polymorphisme est comme une télécommande universelle. Qu'il s'agisse de contrôler un téléviseur, un climatiseur ou une chaîne stéréo, tant que ces appareils disposent d'interfaces (méthodes) correspondantes, la télécommande (référence de classe parent) peut mettre en œuvre différentes fonctions via les mêmes boutons (appels de méthode).

7. Introspection/Réflexion

introspection Cela signifie que l'objet peut connaître ses propres informations au moment de l'exécution. Python fournit des fonctions intégrées pour l'introspection, telles quetype()id()hasattr() attendez.

7.1 Le concept d'introspection

L'introspection signifie qu'un objet peut obtenir ses propres informations au moment de l'exécution, telles que des propriétés, des méthodes, etc. L'introspection rend les programmes Python très dynamiques et flexibles.

exemple:

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. person = Person("Alice", 30)
  6. # 使用内置函数进行自省
  7. print(type(person))
  8. print(hasattr(person, "name"))
  9. print(getattr(person, "name"))
  10. setattr(person, "name", "Bob")
  11. print(person.name)
  12. delattr(person, "name")

7.2 Utiliser l'introspection pour les opérations dynamiques

Grâce à l'introspection, nous pouvons manipuler dynamiquement les propriétés et les méthodes des objets au moment de l'exécution, rendant le programme plus flexible et dynamique.

exemple:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.speed = 0
  5. def accelerate(self):
  6. self.speed += 5
  7. return self.speed
  8. car = Car("Toyota")
  9. # 动态操作对象
  10. if hasattr(car, "accelerate"):
  11. method = getattr(car, "accelerate")
  12. print(method())
  13. print(method())
  14. # 动态设置属性
  15. setattr(car, "color", "red")
  16. print(car.color)

7.3 Compréhension de Xiao Li

L’auto-examen, c’est comme se regarder dans le miroir. Grâce au miroir (mécanisme d'introspection), les gens peuvent voir à quoi ils ressemblent (propriétés et méthodes des objets) et effectuer les ajustements nécessaires (manipulation dynamique des objets).

8. Méthodes statiques et méthodes de classe

méthode statique etméthode de classe sont des méthodes associées à la classe, pas à l'instance.Utilisation de la méthode statique@staticmethod Décorateur, utilisation de la méthode de classe@classmethod Décorateur.

8.1 Méthodes statiques

Une méthode statique est une méthode d’une classe, mais elle n’est liée à aucune instance de classe. Les méthodes statiques ne peuvent pas accéder aux instances d’une classe ni modifier l’état de la classe. Ils sont généralement utilisés pour effectuer une opération qui n'a rien à voir avec la classe, mais qui appartient logiquement à la fonctionnalité de la classe.

exemple:

  1. class Math:
  2. @staticmethod
  3. def add(a, b):
  4. return a + b
  5. print(Math.add(5, 3))

 

8.2 Méthodes de classe

Les méthodes de classe sont des méthodes liées à la classe plutôt qu'à l'instance.Le premier argument d'une méthode de classe est la classe elle-même, généralement nomméecls . Les méthodes de classe peuvent accéder aux propriétés de la classe et à d’autres méthodes de classe.

exemple:

  1. class Math:
  2. factor = 2
  3. @classmethod
  4. def multiply(cls, value):
  5. return cls.factor * value
  6. print(Math.multiply(5))

Résumer

Tous les aspects de la programmation orientée objet en Python, y compris les concepts de base de la programmation orientée objet, les abstractions, les classes et instances, l'encapsulation, l'héritage, le polymorphisme, l'introspection et les méthodes statiques et de classe.

J'espère que ce blog détaillé pourra vous aider à comprendre en profondeur la programmation orientée objet en Python et à appliquer ces connaissances dans des projets réels. Si vous avez des questions ou avez besoin d'aide supplémentaire, n'hésitez pas à me contacter !