En lugar de usar un OOP común, como Java y C# do con su clase base Object
o object
, Python usa métodos especiales para el comportamiento básico de los objetos. Python usa __str__
que se utiliza cuando el objeto se pasa a print
:Motivo de OOP poco común en Python?
>>> class Demo:
>>> def __str__(self):
>>> return "representation"
>>> d = Demo()
>>> print(d)
representation
Lo mismo con len
:
>>> class Ruler:
>>> def __len__(self):
>>> return 42
>>> r = Ruler()
>>> len(r)
42
lo que esperaría es algo como esto:
>>> class Ruler:
>>> def len(self):
>>> return 42
>>> r = Ruler()
>>> r.len()
42
Lo ¿Es la razón para usar métodos especiales de forma indirecta en lugar de llamar directamente a los métodos habituales?
En cuanto a \ _ \ _ str \ _ \ _, como yo lo entiendo, es estrictamente equivalente a toString de Java/C#. \ _ \ _ str \ _ \ _ da una representación textual del objeto, que es claramente diferente de lo que lo hace la impresión: imprime la representación textual en el resultado estándar. – ChrisJ
¿Es esto lo que quieres decir? http://docs.python.org/faq/design.html#why-does-python-use-methods-for-some-functionality-eg-list-index-but-functions-for-other-eg-len- list –
@Thomas sí, esa es la respuesta. Tal vez quieras escribirlo como una respuesta ... – deamon