2017-03-08 58 views
0

我有兩個文件從第三個文件導入相同的對象跟蹤方法。它的工作原理是這樣的Maya Python:由於重新加載而導致的未綁定方法()

file TrackingMethod 

    class Tracker(object): 
     def __init__(self,nodeName=None,dag=None,obj=None): 
      #Does some open maya stuff to get the dag path 
     def fullpath(self): 
      return dag.fullpath() 

file Shapes #classes that create objects with shape nodes 
    import TrackingMethod as trm 
    reload(trm) 

    class circle(trm.Tracker): 
     def __init__(self,nodeName=None,dag=None,obj-None): 
      #does some shape related stuff then inits tracker 
      trm.Tracker.__init__(self,nodeName=nodeName,dag=dag,obj=obj) 

file ShaderNodes #Classes that create shading nodes 
    import TrackingMethod as trm 
    reload(trm) 

    class shaderThingy(trm.Tracker): 
     def __init__(self,nodeName=None,dag=None,obj-None): 
      #does some shader related stuff then inits tracker 
      trm.Tracker.__init__(self,nodeName=nodeName,dag=dag,obj=obj) 

這是問題所在。該錯誤發生在trm.Tracker。 init。如果我使用這兩個文件並且碰巧重載()ShaderNode或Shapes,則另一個的方法將不再識別它們是原始TrackingMethod類的子類。通過重新加載其他類失去它的參考回來,我得到兩種:

>>unbound method __init__() must be called with Tracker instance as first argument (got circle instance instead) 

>>unbound method __init__() must be called with Tracker instance as first argument (got ShaderThingy instance instead) 

..depending上被重新加載。無論哪個是最後得到重新加載的作品,並且以前重新加載的都會被解除綁定。

請注意,我需要重新加載這些腳本來測試我的更改。我知道一旦重新加載出現,他們將不再被解除綁定,但我需要在工作時看到我的更改。

我該怎麼辦?

+0

我意識到這個問題與我以前的一個非綁定方法問題非常相似,但超級解決方案與前一個例子不一致,我想知道爲什麼現在。我已經將問題縮小到使用重新加載。我想問的是,是否有一種巧妙的方式來重新加載腳本,以便它不會破壞使用相同源文件的其他文件。 –

回答

0

您可以嘗試兩次使用兩個名稱導入TrackingMethods。

在形狀:

import TrackingMethods as trm_shapes 


class shape(trm_shapes.Tracker) ... 

而在着色器:

import TrackingMethods as trm_shaders 

class shader(trm_shaders.Tracker) ... 

這應該工作,只要外無人嘗試檢查着色器或圖形對象是否是一個跟蹤器實例 - 它會失敗。

+0

剛試過這個,它不起作用。對於我的生活,我無法弄清楚爲什麼,但我仍然得到了未綁定的方法..儘管有自己的本地進口。由於某些奇怪的原因,它有時在按照神奇的正確順序加載時有效,但不是其他原因。有時它認識到它是一個跟蹤器對象,有時它只能看到最近的類,圓圈。令人沮喪。 –

0

你可能想從你的子模塊移除重新加載,並在由依賴於文件所隱含的邏輯順序重新加載:

reload(TrackingMethod) 
reload(Shapes) 
reload(ShaderNodes) 

對於這樣它的工作原理一個小案例,但如果事情變得更復雜,這將是很難管理。

+0

我覺得我很難管理舞臺。每當我創建一個新選項卡或某個需要新文件的方面時,我都需要加載這些跟蹤模塊,並且我正在加載它們。我認爲現在有5個不同的文件是它爲什麼會中斷的原因。感覺這裏沒有解決方案,我需要重寫整個跟蹤以不使用__init__或在5k行代碼中創建一個巨大的跟蹤文件。這非常令人沮喪。 –

相關問題