Sto avendo un problema davvero strano con Python super() e ereditarietà e proprietà. Innanzitutto, il codice:Python super e impostazione proprietà parent classe
#!/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
Questo funziona correttamente. Tuttavia, quello che voglio (quello che sembra Pythonic mi)
#super(Sprite, self.__class__).x.fset(self, value)
super().x = value
non funziona, anche se
super().x
ottiene la multa del valore. x in questo caso è una proprietà della superclasse con sia fset che fget definiti. Quindi perché non funziona?
Ho archiviato un bug: http://bugs.python.org/issue14965 Speriamo che questo sia risolto presto, quindi questa domanda non è più rilevante. – darkfeline
"non è supportato ... un motivo sufficiente" sembra "perché è solo". – simonzack
@simonzack - Ho detto che stavo * cercando * di non dare quel tipo di risposta e di spiegare il più possibile sulla sua funzionalità. – jdi