>>> class foo(object):
... def test(s):
... pass
...
>>> a=foo()
>>> a.test is a.test
False
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> hash(a.test)
28808
>>> hash(a.test)
28808
>>> id(a.test)
27940656
>>> id(a.test)
27940656
>>> b = a.test
>>> b is b
True
Respuesta
Están vinculados en tiempo de ejecución; el acceso al atributo en el objeto vuelve a enlazar el método de nuevo cada vez. La razón por la que son diferentes cuando pones ambos en la misma línea es que el primer método no se ha liberado cuando el segundo está vinculado.
Dicho de otra manera, el 'id' parece ser el mismo cada vez porque la instancia anterior se gc inmediatamente después de que se imprimió el resultado, y la administración de memoria en esa versión particular de CPython resulta lo suficientemente predecible para poner el siguiente objeto en el mismo lugar. – delnan
Jaja, nunca se me ocurrió que el GC lo reubicaría en el mismo directorio. Gracias, todo esto tiene sentido. –
- 1. ¿Por qué estos números no son iguales?
- 2. ¿Por qué Java no ve que los enteros son iguales?
- 3. ¿Por qué el operador! = De Python piensa que los argumentos son iguales y no iguales al mismo tiempo?
- 4. Nothing = String.Empty (¿Por qué son iguales?)
- 5. ¿Por qué arr y & arr son iguales?
- 6. Python: ¿Por qué algunos de los métodos de Queue.queue "no son confiables"?
- 7. Parámetros enlazados de Java en métodos genéricos
- 8. ¿Qué es mejor? Los métodos estáticos o métodos de instancia
- 9. ¿Por qué los conjuntos de Python no son lavables?
- 10. ¿Cómo se determina si dos HashSets son iguales (por valor, no por referencia)?
- 11. ¿Qué son los métodos virtuales?
- 12. ¿Por qué los objetos de referencia circular con __del__ definido son incobrable en Python?
- 13. ¿Por qué los métodos de recolección de basura de Java y Python son diferentes?
- 14. ¿Por qué los objetos Buffer y List son iguales (incluso si son de clases diferentes)?
- 15. ¿Por qué son tipos de referencia de punteros?
- 16. ¿Por qué los métodos Array no están integrados en una instancia de Array?
- 17. ¿Qué son los métodos de extensión?
- 18. ¿Por qué python super no acepta solo la instancia?
- 19. ¿Los métodos LINQ son métodos de extensión?
- 20. ¿Por qué estos objetos no son iguales por defecto en D?
- 21. ¿Por qué los navegadores modernos no son compatibles con los métodos de forma PUT y DELETE?
- 22. ¿Qué son los métodos anónimos en C#?
- 23. Python: hay alguna irregularidad con dinámicamente la asignación de los métodos de instancia como instancia atribuye
- 24. ¿Por qué los métodos parciales no son públicos si la implementación está en el mismo conjunto?
- 25. ¿Es esta la manera correcta de saltear métodos de instancia? Si es así, ¿por qué no está en Python 3?
- 26. ¿Por qué los métodos antlr3 C# parser son privados?
- 27. Métodos estáticos de Python, ¿por qué?
- 28. ¿Por qué strcmp() devuelve 0 cuando sus entradas son iguales?
- 29. ¿Cómo hacer referencia a los métodos de instancia en la documentación?
- 30. ¿Por qué los EJB son seguros y los servlets no?
Lo siento, ¿qué? – Mat