Maya Python:由于Reload()而导致的未绑定方法

时间:2017-03-08 15:01:42

标签: python import reload maya

我有两个文件从第三个文件导入相同的对象跟踪方法。它的工作原理是这样的

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) 

..取决于哪些重新加载。无论哪个是重新加载的工作,以前重新加载都是未绑定的。

请注意,我需要重新加载这些脚本来测试我的更改。我知道一旦重新加载,他们就不会再被束缚了,但我需要在工作时看到我的变化。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以尝试两次使用两个名称导入TrackingMethods。

形状:

import TrackingMethods as trm_shapes


class shape(trm_shapes.Tracker) ...

在着色器中:

import TrackingMethods as trm_shaders

class shader(trm_shaders.Tracker) ...

这应该可行,只要外面没有人试图检查着色器或形状对象是否是跟踪器的实例 - 它就会失败。

答案 1 :(得分:0)

您可能希望从子模块中删除重新加载,并按照文件中依赖项隐含的逻辑顺序重新加载它们:

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

对于像这样的小案例,它可行,但如果事情变得更复杂,那么它将很难管理。