Chaque fois que nous créons une nouvelle classe, Python stocke chaque attribut dans un attribut dict qui est appelé dictionnaire dynamique. Ce comportement par défaut semble pratique, car il est flexible, mais lorsque vous travaillez avec un grand nombre d'instances ou que l'utilisation de la mémoire est importante, cette surcharge peut être importante.
Python utilise essentiellement un dictionnaire pour stocker les attributs de classe, mais l'une des alternatives consiste à utiliser slots. En définissant ce nom, nous demandons à Python d'utiliser une structure plus statique et compacte qui réduit considérablement l'utilisation de la mémoire. Voici un exemple de base de la façon d'utiliser les emplacements dans une classe.
import sys class WithoutSlots: def __init__(self, x, y): self.x = x self.y = y class WithSlots: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y obj1 = WithoutSlots(1, 2) obj2 = WithSlots(1, 2) print(sys.getsizeof(obj1.__dict__)) # 296 print(sys.getsizeof(obj2)) # 48
Comme indiqué ci-dessus, « WithoutSlots » utilise beaucoup plus de mémoire que « WithSlots ». Pensez à créer de nombreuses instances de la classe : quelle approche serait le meilleur choix ?
slots peut être un outil utile, mais comporte des limites :
obj = WithSlots(1, 2) obj.z = 3 # This will raise an AttributeError
Nous pouvons contourner ce problème en ajoutant dict au slot.
Pas d'héritage multiple : chaque classe de base doit contenir des slots définis, sinon python reviendra à l'utilisation d'un dictionnaire pour stocker les attributs d'instance.
Aucune valeur par défaut : vous devez explicitement initialiser les valeurs par défaut dans la méthode init.
J'ai écrit quelques meilleurs exemples de scénarios dans lesquels nous pouvons utiliser les emplacements :
Voici comment les slots sont utilisés en Python : vous pouvez les utiliser lorsque vous êtes certain que vous n'aurez besoin d'aucun autre attribut pour votre classe et que vous travaillez avec un grand nombre de cas. En définissant slots, vous demandez à Python d'utiliser une structure plus efficace et plus compacte pour stocker les attributs, ce qui permet d'économiser de la mémoire. Ceci est particulièrement pratique lorsque l'utilisation de la mémoire est un problème ou lorsque vous devez optimiser les performances. N'oubliez pas qu'avec slots, vous ne pouvez pas ajouter de nouveaux attributs de manière dynamique, il est donc préférable de l'utiliser lorsque vos attributs de classe sont fixes et bien définis.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3