Se supone que el código siguiente debe imprimir lo mismo tres veces. ¿Por qué no?Raracidad de acceso variable en un derivado de QObject
from PySide.QtCore import QObject
class A(QObject):
instance = 1
@classmethod
def test(cls):
cls.instance # Remove this line and it prints the right thing
cls.instance = cls()
print(cls.__dict__['instance'])
print(cls.instance)
print(type.__getattribute__(cls, 'instance'))
A.test()
Resultado esperado:
<__main__.A object at 0x1310c20>
<__main__.A object at 0x1310c20>
<__main__.A object at 0x1310c20>
Resultado real:
<__main__.A object at 0x2242878>
1
1
La metaclase detrás QObject ni siquiera anular getAttribute así que ¿cómo es posible que yo no recibo la instancia A vuelve con "cls.instance"?
Aún más extraño es que el hecho de no acceder al atributo (ver la línea de código comentada) antes de asignarlo hace que funcione bien.
puedo reproducir este como sigue (con PySide 1.1.0):
- Windows 7 64-bit, Python 2.7.1 de 32 bits: obras
- Windows 7 64-bit, Python 2.7 0.3 de 32 bits: obras
- Windows 7 de 64 bits, Python 3.2.3 de 32 bits: falla
- Ubuntu 11.10 64 bits, Python 2.7.2+: trabaja
- Ubuntu 11.10 de 64 bits, Python 3.2.2: falla
Actualización: Logré compilar PySide 1.1.1 en Python 3.2.2 en Ubuntu, y no soluciona el problema.
'32bit' Me estoy poniendo espera Python 2.7.3 y 1.1.0 PySide en Windows. – reclosedev
Python 2.7.3 en Ubuntu 12.04, tanto PySide como PyQt4 proporcionan los resultados esperados. – pwuertz
Python 3, ¿alguien? Ese parece ser el quid del problema aquí. –