4

例として、次のコードを参照してください。

import numpy as np

N = 200
some_prop = np.random.randint(0,100, [N, N, N])

#option 1
class ObjectThing():
  def __init__(self, some_prop):
    self.some_prop = some_prop


object_thing = ObjectThing(some_prop)



#option 2
pseudo_thing = {'some_prop' : some_prop }

オプション1が提供する構造が気に入っています。これにより、アプリケーションの操作がより厳格になります。しかし、私が気付いていない他の絶対的な利点があるかどうか疑問に思っています。

4

2 に答える 2

1

JITコンパイラー(PyPyなど)を含むPythonの実装を使用している場合、実際のオブジェクトを使用すると、コードを最適化するコンパイラーの機能を向上させることができます(コンパイラーは、オブジェクトのメンバーがどのように使用されているかを推論しやすいためです。プレーン辞書)。

オブジェクトを使用すると、サブクラス化も可能になり、冗長な実装を節約できます。

于 2013-03-04T03:12:33.177 に答える
1

オブジェクトを使用することの明らかな利点は、単にデータを格納するだけでなく、オブジェクトの機能を拡張できることです。たとえば、2つの属性を持ち、単に両方を比較して両方が一致しない限り返す以外__eq__方法で両方の属性を使用する定義とメソッドを作成できます。False

また、クラスを定義すると、元のクラスの構造を共有するそのクラスの新しいインスタンスを簡単に定義できますが、辞書を使用すると、その構造を再定義するか、ある種のコピーを作成する必要があります。元の要素を変更してから、新しい疑似オブジェクトに必要な値に一致するように各要素を変更します。

辞書の主な利点は、さまざまな事前定義されたメソッド(など.items())が付属していること、を使用して簡単に繰り返すことがinできること、dict内包表記を使用して便利に作成できること、およびを使用してデータ「メンバー」に簡単にアクセスできることです。文字列変数(実際には、getattr関数はオブジェクトで同じことを実現します)。

于 2013-03-04T03:17:42.440 に答える