He estado leyendo en el special class methods de python en Dive into Python, y parece que algunos métodos tienen una sintaxis impar o incoherente.Incoherencia de sintaxis de Python?
para obtener los elementos de un diccionario que llamarían los artículos método de la clase Dictionary()
>>> my_dictionary.items()
[('name', 'Old Gregg'), ('Race', 'Scaly Man-Fish')]
Sin embargo, para determinar el número de claves en ese diccionario que llamarían len()
y le facilitará el diccionario como un argumento.
>>> len(my_dictionary)
2
siempre supuse que métodos como len()
no eran en realidad parte de cualquier clase que ellos llaman el dado su sintaxis, pero después de leer el capítulo 5 de Inmersión en Python veo que len()
realidad da lugar a un método bienestar diccionario llamado.
my_dictionary.__len__()
¿Por qué no lo es y métodos como este se llaman como un método de clase típico?
my_dictionary.len()
¿Hay alguna convención que desconozca?
La respuesta más rápida que he recibido. Gracias, buen señor –
La última parte de la explicación de/F en ese enlace también es perspicaz. Muchas construcciones tienen implementaciones predeterminadas en términos de * otras interfaces * que las clases pueden proporcionar. Entonces 'iter (x)', por ejemplo, primero intenta 'x .__ iter __()', pero también define un repliegue en términos de 'x .__ len __()' y 'x .__ getitem __ (i)'. – ncoghlan