したがって、次のような構造の 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
ていますが、まだテストしていません。私が間違っていることを理解するのを手伝ってくれる人はいますか?