this の質問に対するフォローアップのいくつか。
プレーヤーのPlayer
とattributes
を保持する辞書呼び出しHealth
を持つMana
クラスがあるとします。この例ではPythonを使用しますが、読み続けるとわかるように、私の質問は言語に依存しません。
Player
コンストラクターで、要素をディクショナリに追加しても大丈夫ですか?
例:
class Player:
def __init__(self, name, health, mana):
self._name = name
# Using type hints to indicate the types the dictionary contains
self._attributes: Dict[str,int] = {}
self._attributes["Health"] = health
self._attributesplayer_details["Mana"] = mana
その理由は、正しい辞書がコンストラクターに渡されることを確認するために多くの検証が必要になるためです。
次のことを確認する必要があると考えてください。
Health
とMana
の両方が辞書にあります上記の例では、Health
とMana
が100を超えていないことを確認する必要があります。どのように保存されているかは、外部コードには関係ありません。
この例は、constructor
が機能してはならないというガイドラインに違反していますか?もしそうなら、どのように修正すればよいですか?
これは単なる初期化なので、問題ありません。オブジェクトを設定するコンストラクターのポイント。これはオブジェクトの設定なので、問題ありません。
「コンストラクターは機能してはならない」と言うときは、コンストラクターがオブジェクトのセットアップ以外のことをしてはならないことを意味します。たとえば、次のことはコンストラクターには適切ではなく、willは最終的に頭痛の種になります。