2017-03-08 56 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行代码中创建一个巨大的跟踪文件。这非常令人沮丧。 –

相关问题