Python super и установка свойства родительского класса

У меня действительно странная проблема с Python super(), наследованием и свойствами. Во-первых, код:

#!/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

Это прекрасно работает. Однако то, что я хочу (то, что мне кажется Pythonic)

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

, не работает, хотя

super().x

получает значение в порядке. x в этом случае является свойством суперкласса с определенными как fset, так и fget. Так почему же это не работает?

21
задан darkfeline 29 May 2012 в 18:19
поделиться