私は変数をインポートした後に変数として使用するデータを扱っています。私はその後、属性としてオブジェクト内の変数を使用したいと思います。オブジェクト属性としてデータをインポートして使用するPythonic方法
これまで、私はImportDataクラスを作成してこれを達成しました。そして、別のクラスObjで構成され、他の計算に使用されます。私が使用した別の解決策は、ImportDataクラスを継承することです。
定義データクラス
class ImportData:
def __init__(self, path):
# open file and assign to some variables
# such as:
self.slope = 1
self.intercept = -1
溶液1:使用組成物
class Obj:
def __init__(self, data_object):
self.data = data_object
def func(self, x):
return self.data.slope*x + self.data.intercept
data_object = ImportData('<path>')
obj = Obj(data_object)
# get the slope and intercept
print('slope =', obj.data.slope, ' intercept =', obj.data.intercept)
# use the function
print('f(2) =', obj.func(2))
溶液2:使用継承
class Obj(ImportData):
def __init__(self,path):
super().__init__(path)
def func(self, x):
return self.slope*x + self.intercept
obj = Object('<path>')
# get the slope and intercept
print('slope =', obj.slope, ' intercept =', obj.intercept)
# use the function
print('f(2) =', obj.func(2))
私は好きではない私は、以下の例を持っています私が属性にアクセスする必要があるたびに余分な "データ"をタイプする必要があるのでどちらかに行くのが正しい方法です。
私は左のフィールドに出ていますが、より良い解決策がありますか?
ではなく、
Obj
を参照するように行われます。誰かが「o」と入力した場合を除いて、これはクールです。 IDEはデータをオプションとして一覧表示します。もう一つ興味深いのは、o.slopeへの代入はoに入っていますが、メソッドを中断しないことです。この場合、継承よりも構成はまだ良いですか? – StevenDIDEのコード補完のこの特定のケースでは、おそらくそうではありません。それが問題であれば、 'data'の先頭にアンダースコア(' _data')をつけて、コードの読者に、直接アクセスすべきではないObjの実装の詳細を示すことができます。しかし、これは継承が合成よりも、またはその逆であることを意味しません。解決しようとしている問題に応じて、どちらも長所と短所があります。 – snakecharmerb