Tengo un problema realmente extraño con Python super() y herencia y propiedades. En primer lugar, el código:Python super y configuración de la clase primaria propiedad
#!/usr/bin/env python3
import pyglet
import pygame
class Sprite(pyglet.sprite.Sprite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.rect = pygame.Rect(0, 0, self.width, self.height)
self.rect.center = self.x, self.y
@property
def x(self):
return super().x
@x.setter
def x(self, value):
super(Sprite, self.__class__).x.fset(self, value)
self.rect.centerx = value
@property
def y(self):
return super().y
@y.setter
def y(self, value):
super(Sprite, self.__class__).y.fset(self, value)
self.rect.centery = value
Esto funciona bien. Sin embargo, lo que yo quiero (lo que parece a mí Pythonic)
#super(Sprite, self.__class__).x.fset(self, value)
super().x = value
no funciona a pesar de que
super().x
consigue la multa de valor. x en este caso es una propiedad de la superclase con fset y fget definidos. Entonces, ¿por qué no funciona?
He archivado un error: http://bugs.python.org/issue14965 Espero que esto se resuelva pronto, por lo que esta pregunta ya no es relevante. – darkfeline
"no es compatible ... una razón bastante buena" suena como "porque simplemente es". – simonzack
@simonzack - Dije que estaba * intentando * no dar ese tipo de respuesta y explicar lo más posible sobre su funcionalidad. – jdi