python Si vous souhaitez implémenter des opérations retardées, vous devez appliquer du temps, puis utiliser la méthode sleep de time
Par exemple, je veux écrire une opération qui s'imprime avec un délai de 1 seconde
1 2 3 4 |
|
En Python, le chargement paresseux est beaucoup utilisé. Son idée principale est de retarder l'instanciation de la classe à introduire, économisant ainsi le temps et l'espace requis pour l'initialisation.
Cette idée est également largement utilisée dans Django, comme QuerySet d'ORM et request.user dans le middleware d'authentification, etc. Ceux-ci utilisent tous l'idée de chargement différé.
Cet article analyse l'idée du chargement paresseux à travers des exemples.
L'idée de base de l'implémentation du chargement paresseux est que je crée une classe et que nous lui transmettons la classe dont nous avons besoin pour instancier. À ce moment-là, la classe deviendra une classe de chargement paresseux lors de l'application, même si j'instancie cela. Chargement paresseux des classes, mais la classe que nous voulons référencer n'est pas instanciée.
Comme ce qui suit :
1 2 3 4 5 6 7 8 9 10 |
|
J'ai défini une classe User ci-dessus, qui est la classe que nous voulons référencer dans le programme, et CommonLazyObject est la classe de chargement paresseux que nous avons définie (nous en parlerons plus tard). En chargeant paresseusement la classe, nous n'avons pas besoin de l'initialiser à l'avance. Elle ne sera instanciée que lorsque nous souhaitons effectuer des opérations telles que user.age ci-dessous.
D'accord, jetons un coup d'œil au processus d'implémentation spécifique de la classe de chargement paresseux.
Réflexion : notre opération d'instanciation se résumera en fin de compte à des opérateurs tels que __getattr__ et __setattr__. Par conséquent, tant que nous définissons ces opérateurs, nous pouvons atteindre ces délais, c'est-à-dire uniquement lorsque ces opérations sont effectuées, pour réellement instancier le. classe que nous voulons instancier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Regardez d'abord le __setattr__ ci-dessus. Lorsque nous effectuons l'opération d'affectation de user.age=28, cet opérateur sera appelé s'il n'y a pas de classe de retard Pour instancier la classe que nous voulons introduire. , nous allons d'abord l'instancier, c'est-à-dire appeler self._init_object et l'attribuer à _wrapper. Si l'instanciation est terminée, la méthode __setattr__ de l'instance sera exécutée immédiatement.
De même, __getattr_ est également le même. Si je veux imprimer user.name, je dois d'abord vérifier si la classe référencée a été instanciée. Sinon, instancier-la d'abord, puis appeler __getattr__ de l'instance.
D'accord, regardons une sous-classe qui implémente l'instanciation :
1 2 3 4 5 6 |
|
Le processus d'instanciation de cette sous-classe est très simple, il suffit de l'appeler directement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!