デザインを考慮する場合、どの場合にはクラス対dictを使用するのが理にかなっていますか? Pros &短所も有用でしょう。Pythonでclassとdictをいつ使うのですか?
albumstate['album'] = album
albumstate['photos_shown'] = []
albumstate['photos_notshown'] = range(album.size())
デザインを考慮する場合、どの場合にはクラス対dictを使用するのが理にかなっていますか? Pros &短所も有用でしょう。Pythonでclassとdictをいつ使うのですか?
albumstate['album'] = album
albumstate['photos_shown'] = []
albumstate['photos_notshown'] = range(album.size())
対
例えば、
class AlbumState:
""" AlbumState class, tracks photos shown, etc"""
def __init__ (self, album):
""" album for this object will track state"""
self.album = album
self.photos_shown = []
self.photos_notshown = range(album.size())
私は、クラスを使用するかどうかを区別するために、最初の、そして最も重要な基準を言うでしょうか辞書には、あなただけのいくつかのデータを持っているかどうかでありますまた、いくつかのロジック(つまり、メソッド)が必要な場合もあります。
複数のデータをまとめて保存する必要がある場合は、辞書を使用してください。一方、そのデータに対して実行される操作が必要で、データと操作の間に非常に密接な関係がある場合(一種のエンティティを形成する場合)、実際にはクラスを使用する必要があります。
@Benが示唆しているように、関連するデータがたくさんあるときは辞書を使い始めることができます。また、ある時点でそのデータのロジックが必要であると分かっている場合は、クラス。
また、クラスの使い方については、Unified Modeling Language (UML)とそのclass diagramsをご覧ください。小さなアプリケーションのプログラミングやプログラミングをしているだけでは、UMLを使う必要はないかもしれませんが、より大きくて複雑なシステムを設計している場合は、事前に必要なクラスとクラスを決定するのに役立ちます。
私は追加するだけです。あなたがデータの関連付けだけを望んだと思ったが、それに続いてロジックが必要だと分かった場合は、クラスを後でダウンする。また、defaultdictの使用を検討してください。これは、あなたのdictsの振る舞いを振る舞うように見えるからです。 – Ben
dict
は、任意のハッシュ可能な値をキーとして使用できますが、class
インスタンスは正当な識別子である文字列をその「キー」として持つ必要があります。したがって、任意のデータをまとめてdict
にまとめることができます。
それはあなたのキー値がすべてとにかく有効な識別子の文字列になりますと、より-便利dict
として自明なクラスを使用するためにはかなり一般的です:
class Box:
pass
x = Box()
x.a = 0
x.b = 1
d = {}
d["a"] = 0 # "x.a" is easier to type than this
d["b"] = 1
print("Current value for 'a' is: {}".format(x.a))
とすぐに適切なオブジェクト指向設計を行うことを始めると、とあなたはメソッドの関数を持っているので、データを適切なクラスに入れてメソッドの関数をバンドルすることができます。彼らはすべて関連している、それだけでclass
にそれらをバンドルすることが理にかなっています。
最後に、dict
はclass
の実装に使用されるビルディングブロックです。クラスに値を格納する場合、それらは実際には内部のdict
の内部に格納されており、アクセスするための便利な構文がいくつかあります。
print(x.a) # prints 1
print(x.__dict__["a"]) # does exact same thing as previous line
に関連
優れた答え。特に、「データに沿ったメソッド関数があります。データを適切なクラスに入れて、メソッド関数をバンドルすることができます。それだけではなく、それを操作するグローバル関数をいくつか持つことは合法ですが、もしそれらがすべて関連していれば、それらを 'クラス 'にまとめるのは理にかなっています。これはOOPの主要なセールスポイントの1つです:方法とデータを束ねるため、緩い変数で動作するグローバル関数を持つ必要はありません。 – Ugur
[Pythonの:?私はクラスや辞書を使用すべき](http://stackoverflow.com/questions/4045161/python-should-i-use-a-class-or-dictionary)と[Python dictをオブジェクトに変換する]にはどうすればいいですか?(http://stackoverflow.com/questions/1305532/convert-python-dict-to-object) – ChaimG