私が最善の方法で何かをしているのかどうかについての質問...
Pythonで、(少なくとも)次のようなクラス階層を作成したいと思います。
class Actor
class Mover(Actor)
class Attacker(Actor)
class Human(Mover, Attacker)
しかし、私は、以下のように、およびサブクラスActor
のそれぞれから、初期化したい特定の属性を持っているという事実にぶつかります。Mover
Attacker
class Actor:
_world = None
def __init__(self, world):
self._world = world
class Mover(Actor):
_speed = 0
def __init__(self, world, speed):
Actor.__init__(self, world)
self._speed = speed
class Attacker(Actor):
_range = 0
def __init__(self, world, range):
Actor.__init__(self, world)
self._range = range
その後、これに対する最初のアプローチを採用し、スーパークラスのコンストラクターを使用するという点で常に持っているものに従うと、明らかにActor
コンストラクターを2回呼び出すことになりますが、問題はありませんが、プログラマーはうずきを感じて「 dむしろそれをよりクリーンな方法で行います。
class Human(Mover, Attacker):
def __init__(self, world, speed, range):
Mover.__init__(self, world, speed)
Attacker.__init__(self, world, range)
たとえば、コンストラクターを呼び出すことしかできず、単に'sを明示的に初期化することしかできませんでしたが、これは、の初期化コードを複製するため、はるかに悪いアプローチとして私に飛びつきます。Mover
Human
_range
Attacker
私が言ったように、_world
属性を2回設定することは大したことではないことを私は知っていますが、もっと集中的なことが起こった場合Actor.__init__
、この状況は心配になると想像できます。Pythonでこの構造を実装するためのより良い方法を誰かが提案できますか?