私が作成しているゲームのエンティティクラスを定義し始めました。しかし、私は多くのコードを再利用したい。私は、さまざまな機能のクラスを定義し、これらのクラスの機能のいくつかを持つクラスを作成したいと考えています。私が聞いたゲームのエンティティクラスでPythonのコードを再利用する方法
class Collidable:
def handle_collision(other, incident_vector):
pass
def __init__(self, shape):
self.shape = shape
class Movable:
def update_position(self):
self.velocity += self.acceleration
self.position += self.velocity
def __init__(self, velocity, acceleration):
self.velocity, self.acceleration = velocity, acceleration
class Drawable:
def draw(self):
pass
def __init__(self, image):
self.image = image
class Controllable:
def key_down(self, key):
pass
def __init__(self):
pass
が続いて制御可能な衝突可能、可動、Drawableの、あるPlayer
クラスを持っている、唯一の衝突可能であるInvisible Barrier
、唯一のDrawableのあるBackground
など:たとえば
(コンポジション、(複数の)継承、インターフェースなどを介して)複数のクラスを接続するためのさまざまな方法がありますが、どの状況が最も適切か、そして/またはピジョンソニックであるかはわかりません。
ミックスイン(多重継承の特殊なケース)は私が探しているものです(プレイヤーはコリドー、ムーブブル、ドローラブル、コントロール可能でなければなりません)。 super
を使って右の引数を正しいinit関数に渡すのが難しいと思っています。
編集:
私のpython 3.2を使用しています。
は、「オブジェクト」から、しかし短い、常に自分のクラスを継承することを忘れないでください。 Python 2では "オブジェクト"から派生したクラスである新しいスタイルクラスでしか動作しない、非常に多くの便利な機能があります。別の方法として、たくさんの短いクラスを継承する単一のファイルがある場合は、モジュールレベルの '__metaclass __ = type'変数を設定するだけです。オブジェクトから各クラスを継承するのと同じ効果があります。 – jsbueno
これはPython 3.x?私は、私が開発にPython 3.2を使用しているとは言及していませんでした。なぜなら、構文の変更(直接的なものから親への間接的なものへの変更)以外の「スーパー」に関する問題は認識していなかったからです。 – Darthfett
@Darthfett:Py3kでは、クラスはデフォルトで 'object'から継承します。 –