2012-03-14 64 views
-2

我想在實例的某些參數(不一定與示例中的類相同)之間創建依賴關係。我想出了以下代碼,直到我決定將它移入模塊並通過導入使用它。導入的和定義的類之間的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 2012-03-14 21:02:12

+1

什麼「問題」?您是否收到某種您忘記包含的錯誤信息?我也沒有在您發佈的內容中看到任何「import」聲明;你的問題與導入有關嗎? – kindall 2012-03-14 21:03:03

+0

另外,那些'eval()'語句應該做什麼? – Blender 2012-03-14 21:03:58

回答

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

謝謝,我沒有嘗試過這個,我絕對應該。嘗試了一些其他的東西,這讓我得出結論,它不會那麼容易。 – 2012-03-14 21:18:19

+0

當再次創建obj1實例時,有一個小問題,依賴性丟失。我thik我試圖用eval()來解決這個問題。當然這不是什麼大問題,我只能避免重寫實例,這似乎是一個不好的習慣。 – 2012-03-14 21:48:08

相關問題