Méthodes d'usine

Programmation orientée objet intermédiaire en Python

Jake Roach

Data Engineer

Logique conditionnelle dans une méthode

class Student:
    # Logique conditionnelle avec un comportement similaire pour tous les cas
    def explore_topic(self, resource_type, topic):
        if resource_type == "Textbook":
            print(f"Referencing {topic} using a textbook")
            self.reference_textbook(topic)

        elif resource_type == "Blog":
            print(f"Make sure to validate information provided in blogs!")
            self.reference_blog(topic)

        elif resource_type == "Video":
            self.reference_video(topic)
Programmation orientée objet intermédiaire en Python

Méthodes d'usine

Patron de conception qui utilise des méthodes d'usine pour créer des objets utilisés dans une autre méthode

  • Retourner des objets qui implémentent une interface
  • Réduire la complexité d'une méthode
  • Réutilisable, modulaire
  • _ pour désigner une méthode d'usine

$$

D'abord, voyons les produits et produits concrets !

...

  def _get_resource(self, resource_type):  
    if resource_type == "Textbook":
      # Textbook, Blog and Video are
      # all resources
      return Textbook()  

    elif resource_type == "Blog":
      return Blog()  

    elif resource_type == "Video":
      return Video()
Programmation orientée objet intermédiaire en Python

Créer une interface Resource

class Resource(ABC):
    @abstractmethod
    def reference(self, topic):
        pass
class Textbook(Resource):
    def __init__(self):
        self.index = {"Object-oriented Programming": ["Inheritance", ...]}

    def reference(self, topic):
        print(f"Referencing {topic} using a textbook")
        return self.index.get(topic)

# Something similar for Blog, Video
Programmation orientée objet intermédiaire en Python

Revoir explore_topic()

class Student:

    def explore_topic(self, resource_type, topic):
        if resource_type == "Textbook":
            texbook = Textbook()  # Creating an instance of class implementing Resource
            texbook.reference(topic)  # Call the reference() method

        elif resource_type == "Blog":
            blog = Blog()
            blog.reference(topic)

        elif resource_type == "Video":
            video = Video()
            video.reference(topic)
Programmation orientée objet intermédiaire en Python

Créer une méthode d'usine

class Student:
    # Méthode d'usine qui retourne Resource
    def _get_resource(self, resource_type):
        if resource_type == "Textbook":
            return Textbook()  
        elif resource_type == "Blog":
            return Blog()  
        elif resource_type == "Video":
            return Video()

    def explore_topic(self, resource_type, topic):
        resource = self._get_resource(resource_type)  # Récupérer la ressource
        return resource.reference(topic)
Programmation orientée objet intermédiaire en Python

Utiliser des méthodes d'usine

# Créer un objet Student, puis lui faire référencer un manuel
lester = Student()
lester.explore_topic("Textbook", "Object-oriented Programming")

# Passer ensuite à une autre ressource
lester.explore_topic("Video", "Object-oriented Programming")
Referencing Object-oriented Programming using a textbook
["Inheritance", "Constructors", "Class-level methods"]

Video are helpful for visual or audatory learners
["Classes", "Methods", "Attributes", "self"]
Programmation orientée objet intermédiaire en Python

Passons à la pratique !

Programmation orientée objet intermédiaire en Python

Preparing Video For Download...