Pourquoi utiliser dans les classes python : la méthode __len__()

Pourquoi utiliser dans la classe python : la méthode len ()




__len__()La fonction de est de retourner le nombre d'éléments dans le conteneur. Pour que len()la fonction s'exécute avec succès, elle doit être définie dans la classe __len__(). L' len()exécution de fait référence à l'entrée dans la fenêtre de commande len()et dans le programme, __len__()elle peut être exécutée avec succès même si elle n'est pas définie dans des circonstances normales. Regardez principalement le comportement de la fenêtre de commande, voyez si l'entrée estlen (objet)toujourslen(objet.propriété).
Lors de l'utilisation de len(function), ce qui s'appelle en fait est object.__len__la méthode.

  • Cas 1:
class CountList(object):
	def __init__(self, *args):
		self.values = [x for x in args]
		self.values2 = [x for x in args] * 2

	def __len__(self):
		return len(self.values)


c1 = CountList(1, 2, 3, 4, 5)
>>> len(c1)
> 5
>>> len(c1.values2)
> 10

La classe du programme ci-dessus définit __len__()la fonction, *argsqui est un paramètre de longueur variable. Après avoir reçu les données, il les regroupe dans un tuple, puis utilise la boucle for pour transmettre les données à la liste. Lors de l'écriture dans la fenêtre de commande len(c1), car la __len__()valeur de retour définie renvoie la longueur de la liste de l'objet d'instance spécifique, de sorte que len(c1)la longueur de la liste peut être sortie en entrant directement dans la fenêtre de commande,La fonction len () encapsulée dans la classe détermine directement la longueur de l'attribut renvoyé. Nous la définissons généralement comme le nombre d'éléments dans l'instanciation

  • Cas 2 :
class CountList(object):
	def __init__(self, *args):
		self.values = [x for x in args]
		self.values2 = [x for x in args] * 2


c1 = CountList(1, 2, 3, 4, 5)
>>> len(c1)
> Traceback (most recent call last):
	TypeError: object of type 'CountList' has no len()
>>> len(c1.values)
> 5
>>> len(c1.values2)
> 10

S'il n'est pas défini __len__(), une erreur sera signalée lors de la saisie dans la fenêtre de commande len(c1).
Pour les classes, len()la fonctionIl n'y a aucun moyen de calculer directement la longueur d'une classe,parce queIl y a beaucoup d'attributs et de méthodes dans la classe, et la fonction len() ne sait pas laquelle calculer, s'il n'y a pas de méthode définie dans la classe __len__()pour indiquer de quelle propriété le programme doit calculer la longueur, le terminalNous devons prendre len(object.property) pour obtenir le résultat souhaité

mais justeencapsulationEn termes de , il est __len__()préférable de définir , car les utilisateurs n'ont pas besoin de connaître les attributs spécifiques, ils n'ont besoin que d'un objet instancié.

Les références

  1. Méthode Python __len__()-Legolas~-CSDN

Guess you like

Origin blog.csdn.net/weixin_51524504/article/details/129985454