Por qué usar en clases de python: método __len__()

¿Por qué usar en la clase python: método len ()?




__len__()La función de es devolver el número de elementos en el contenedor, para que len()la función se ejecute correctamente, debe estar definida en la clase __len__(). La len()ejecución de se refiere a la entrada en la ventana de comandos len(), y en el programa, __len__()se puede ejecutar con éxito incluso si no se define en circunstancias normales. Mire principalmente el comportamiento de la ventana de comando, vea si la entrada eslen (objeto)aúnlen(objeto.propiedad).
Cuando se usa len(function), lo que en realidad se llama es object.__len__el método.

  • Caso 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 clase del programa anterior define __len__()la función, *argsque es un parámetro de longitud variable. Después de recibir los datos, los empaqueta en una tupla y luego usa el bucle for para pasar los datos a la lista. Al escribir en la ventana de comandos len(c1), debido a que el __len__()valor de retorno definido devuelve la longitud de la lista del objeto de instancia específico, por lo que len(c1)la longitud de la lista se puede generar ingresando directamente en la ventana de comandos,La función len () encapsulada en la clase determina directamente la longitud del atributo que se devuelve. Generalmente lo definimos como el número de elementos en la instanciación.

  • Caso 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

Si no está definido __len__(), aparecerá un error al escribir en la ventana de comandos len(c1).
Para las clases, len()la funciónNo hay forma de calcular directamente la duración de una clase.,porqueHay muchos atributos y métodos en la clase, y la función len() no sabe cuál calcular, si no hay un método definido en la clase __len__()para indicar de qué propiedad el programa debe calcular la longitud, el terminalTenemos que tomar len(objeto.propiedad) para obtener el resultado deseado

pero soloencapsulaciónEn términos de , es __len__()mejor definir , porque los usuarios no necesitan saber cuáles son los atributos específicos, solo necesitan un objeto instanciado.

Referencias

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

Supongo que te gusta

Origin blog.csdn.net/weixin_51524504/article/details/129985454
Recomendado
Clasificación