所以我有一些 Python 代码的结构是这样的;
class GameObject(pygame.spriteDirtySprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = None
self.rect = None
self.state = None
class Bullet(gameobject.GameObject):
FRAME = pygame.Rect(23, 5, 5, 5)
STATES = config.Enum('IDLE', 'FIRED', 'MOVING', 'COLLIDE', 'RESET')
def __init__(self):
gameobject.GameObject.__init__(self)
self.image = config.SPRITES.subsurface(self.__class__.FRAME)
self.rect = self.__class__.START_POS.copy()
self.state = self.__class__.STATES.IDLE
class ShipBullet(bullet.Bullet):
START_POS = pygame.Rect(somewhere)
def __init__(self):
super(bullet.Bullet, self).__init__()
self.add(ingame.PLAYER)
class EnemyBullet(bullet.Bullet):
START_POS = pygame.Rect(somewhere else)
def __init__(self):
super(bullet.Bullet, self).__init__()
self.add(ingame.ENEMIES)
这些实际上是在不同的文件中,但这是一个继承问题,而不是依赖问题。
请注意,ShipBullet
并且EnemyBullet
有不同的START_POS
静态成员,但Bullet
没有。因为Bullet
永远不会真正被创建(如果这是 C++,我会把它变成一个抽象类),这是故意的。我的理由是,当我Bullet.__init__()
从其子类调用时,所述子类将START_POS
在初始化其成员时引用它们自己的。然而,情况并非如此。ShipBullet.rect
(同样对于EnemyBullet
)是None
。我相信image
可能None
也是,但我还没有测试过。有人介意帮我弄清楚我做错了什么吗?