2016-07-10 8 views
2

私はテキストベースのRPGにアイテムを追加しています。私のクラスには、次のようになります。サブクラスを作成する上で、クラスのインスタンスを作成するタイミングを知っていますか?

class Item(object): 
    def __init__(self, name, value, description): 
     self.name = name 
     self.value = value 
     self.description = description 

class Weapon(Item): 
    def __init__(self, name, value, damage, description): 
     self.damage = damage 
     super(Weapon, self).__init__(name, value, description) 

マイプレイヤーのインベントリは異なるゲーム内アイテムのグループを代表するキーを持つ辞書です:

class Player(object): 
    def __init__(self, inventory, ...): 
     self.inventory = {'weapons': []} 
hero = Player() 

質問は、チュートリアルを表示するとき、彼らは私がクラスを作る必要があり、ありますように項目の:

class Dagger(Weapon): 
    def __init__(...) 
     ... 

そして、私の在庫hero.inventory['weapons'].append(Dagger())

に追加

私の個人的な武器に追加する属性がないので、クラスのインスタンスを作成するだけで、Dagger()のような新しいサブクラスを作成することに利点はありますか?任意の助け

おかげで、私はこのポストが明らかであると思います。あなたはさらにそれを拡張することができますので、それはよりダイナミックなコードベースが可能になりますので、サブクラスを作成するコードスタイルの点で

答えて

0

は、良いです。また、コードを読みやすくし、ヘルプメッセージや情報テキストを簡単に追加することもできます。しかし、あなたが言ったように、ダメージを格納するだけで済む場合、サブクラスを作成する利点はあまりありません。武器の名前を保存することも念頭に置いてください。サブクラスを作成することをお勧めします。なぜなら、それはさらなる開発を可能にし、あなたのコードスタイルの方が優れているからです。あなたが新たに作成されたサブクラスに異なる変数を追加したい場合は

0

それはすべてに依存します。危険は、名前、値、損傷、および説明で武器クラスにかかるでしょう。私は、私の異なる武器にロングワード、剣、ダガー、スタッフなどのサブクラスを持たせることになります。これらは異なる攻撃タイプを持つ異なるタイプの武器になります。ダグジャーはジャブ/スタブしか持たないが、ロングソードはスラッシュ、ジャブ、そしてある種のパワースラッシュを持つことがある。

3

自然なis-a関係がある場合、サブクラスを使用します。

だけで、コードの再利用

はダガーが武器なので、それが完璧な理にかなってあなたの例の場合では、単に多型

を取得するには、継承を使用しないでください取得するには、継承を使用しないでくださいサブクラスを使用する。これは

を助け

コンポジション対継承を検索する場合あなたは良い読書材料を得ることができ、またはVS-aはあるが持っている、

希望を

関連する問題