Propiedad de clase padre y super Python

Estoy teniendo un problema realmente extraño con Python super () y la herencia y las propiedades. Primero, el código:

#!/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 quiero (lo que me parece Pythonic)

 #super(Sprite, self.__class__).x.fset(self, value) super().x = value 

no funciona aunque

 super().x 

obtiene el valor bien. En este caso, x es una propiedad de la superclase con fset y fget definidos. Entonces, ¿por qué no funciona?

Estaba tratando de encontrar el lenguaje correcto para respaldar por qué este comportamiento es como es, para no darle una respuesta “porque solo es” … Pero parece que esta pregunta se ha hecho más de una vez, y que se reduce al comportamiento de super() . Puede ver una discusión de 2010 sobre este comportamiento exacto aquí: http://mail.python.org/pipermail/python-dev/2010-April/099672.html

En última instancia, realmente solo se reduce a llamadas super (), lo que le permite acceder directamente a los captadores y no a los configuradores. Se debe acceder a los fset() través de fset() o __set__() . Probablemente se explica más fácilmente como “la funcionalidad super () simplemente no lo admite”. Resolverá la funcionalidad de propiedad de una operación “obtener”, no el configurador en una asignación de zurdos, en la operación “establecer” (de ahí la llamada al método fset() ). Como puede ver en la fecha de este hilo de discusión, obviamente ha sido así desde la introducción de super() .

Tal vez alguien más tenga una razón más específicamente técnica, pero francamente no estoy seguro de que eso importe. Si no es compatible, esa es una razón bastante buena.