我在 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 的超类的属性。那么为什么它不起作用呢?