2012-03-14 9 views
-2

インスタンスのいくつかのパラメータの間に依存関係を作成したいと思います(例では必ずしも同じクラスである必要はありません)。私はfolowingコードを思いつきました。私はそれをモジュールに移動してインポートすることにしました。インポートされたクラスと定義されたクラスのPythonの違い

class objectD(object): 
    def __init__(self,val1,val2,val3): 
    self.val1 = val1 
    self.val2 = val2 
    self.val3 = val3 

    def __str__(self): 
    return str(str(self.val1)+","+str(self.val2)+","+str(self.val3)) 

    def dependence(self,dependent): 
    print "values val1 and val2 of "+str(self)+" now depend on "+dependent 
    self.val1 = eval(dependent).val1 
    self.val2 = eval(dependent).val2 
    self.dependent = dependent 

    def update(self): 
    self.val1 = eval(self.dependent).val1 
    self.val2 = eval(self.dependent).val2 

#test 
obj1 = objectD(350,4,500) 
print obj1 
obj2 = objectD(230,1,1000) 
print obj2 
obj2.dependence("obj1")#problem with imported class occurs there 
print obj2 
obj1.val1 = 1315 
obj1.val2 = 6464 
print obj1 
obj2.update() 
print obj2 

インポートされたバージョンのクラスを使用することによって、依存性を割り当てることは、単にPythonによれば存在しないようです。インスタンスの依存メソッド()の呼び出しは、モジュール内で行われ、スクリプト内では行われないようです。 インポートを何らかの方法で修正する方法や、依存関係を作成するための別の方法がありますか?

+1

本当にあなたが何をしているのか分からない限り、決して 'eval'を使用しないでください。 – Thomas

+1

「問題」とは何ですか?ある種のエラーメッセージが表示されていますが、これは忘れてしまったものですか?私はあなたが投稿したものに 'import'ステートメントも表示されません。あなたの質問はどのようにインポートに関連していますか? – kindall

+0

また、これらの 'eval()'ステートメントは何をしていますか? – Blender

答えて

0

evalの必要はありません。単にこれを代わりに行うのはなぜですか?

class objectD(object): 
    def __init__(self,val1,val2,val3): 
    self.val1 = val1 
    self.val2 = val2 
    self.val3 = val3 

    def __str__(self): 
    return str(str(self.val1)+","+str(self.val2)+","+str(self.val3)) 

    def dependence(self,dependent): 
    print "values val1 and val2 of "+str(self)+" now depend on "+dependent 
    self.val1 = dependent.val1 
    self.val2 = dependent.val2 
    self.dependent = dependent 

    def update(self): 
    self.val1 = self.dependent.val1 
    self.val2 = self.dependent.val2 

#test 
obj1 = objectD(350,4,500) 
print obj1 
obj2 = objectD(230,1,1000) 
print obj2 
obj2.dependence(obj1)#problem with imported class no longer occurs there 
print obj2 
obj1.val1 = 1315 
obj1.val2 = 6464 
print obj1 
obj2.update() 
print obj2 

予想通りdependentが単にobj1への参照ではなく、オブジェクト自体の状態を記憶するので、これは、動作します。したがって、update()への呼び出しは実際に新しい値を取得します。

+0

ありがとう、 。しかし、他にもいくつか試してみましたが、それは簡単ではないという結論に至りました。 –

+0

obj1インスタンスが再度作成されるときに、わずかな問題があり、依存関係が失われます。私はthik私もeval()でこれを克服しようとしていた。もちろん、それは大きな問題ではない、私はちょうど悪い練習と思われるインスタンスを上書きすることを避けなければならない。 –

関連する問題