6

Web サイトをスクレイピングするためのすべての Python ライブラリを楽しんでおり、ただの楽しみとして BeautifulSoup と IMDB を試しています。

私は Java 出身なので、プログラミング スタイルに Java の実践を取り入れています。特定の映画の情報を取得しようとしています。 Movie クラスを作成するか、属性のキーを持つ辞書を使用することができます。

私の質問は、クラスにデータのみが含まれ、おそらくほとんど動作がない場合、辞書を使用する必要があるかどうかです。他の言語では、型を作成すると特定の制限を適用するのに役立ち、型チェックのために IDE がプログラミングを支援しますが、Python では常にそうであるとは限りません。

動作とデータの両方がある場合にのみクラスを作成する必要がありますか? それとも、おそらく単なるデータ コンテナーであっても、ムービー クラスを作成しますか?

これはすべてモデルによって異なります。この特定のケースでは、どちらでも問題ありませんが、何が良い慣行なのか疑問に思っています。

4

4 に答える 4

6

属性を格納するためだけにクラスを使用しても問題ありません。代わりにnamedtupleを使用することもできます

[]dictと class の主な違いは、属性.と継承にアクセスする方法です。

instance.__dict__dict結局のところ_

必要に応じて、これらすべてのタイプのオブジェクトに対して単一のクラスを使用することもできます

class Bunch:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

movie = Bunch(title='foo', director='bar', ...)
于 2012-10-06T15:18:25.740 に答える
0

dict必要なものがすでに提供されている場合は、「おそらくほとんど動作しない」とはどういう意味かによって異なります。dictそれ以外の場合は、特定の動作を追加してサブクラス化することを検討してください。Python 2.2以降では可能です。UsingUserDictは、問題に対する古いアプローチです。

単純な辞書を使用して、何らかの関数を介して外部で動作を実装することもできます。私はこのアプローチをプロトタイピングに使用し、最終的にコードを後でリファクタリングして、オブジェクト指向 (一般的にはよりスケーラブル) にします。

インタープリターでこれを入力すると、辞書が提供するものを確認できます。

>>> help({})

またはドキュメントを参照してください。

于 2012-10-06T16:02:03.453 に答える
0

あなたの場合、dict(eg class MyClass(dict)) から継承するクラスを使用して、辞書のようなクラスにカスタム動作を定義したり、UserDictを使用したりできます。

于 2012-10-06T15:20:11.873 に答える
-3

私はKISSに固執します(単純に愚かにしてください)。値のみを保存したい場合は、実行時に値を動的に追加できるため、辞書を使用することをお勧めします。間違い:(ただし、実行時に新しいフィールドをクラスに追加することはできません。)

したがって、状態と動作を提供するクラスは便利です。

編集: Python でクラスにフィールドを追加できます。

于 2012-10-06T15:25:27.983 に答える