我有两个文件从第三个文件导入相同的对象跟踪方法。它的工作原理是这样的
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)
..取决于哪些重新加载。无论哪个是重新加载的工作,以前重新加载都是未绑定的。
请注意,我需要重新加载这些脚本来测试我的更改。我知道一旦重新加载,他们就不会再被束缚了,但我需要在工作时看到我的变化。
我该怎么办?
答案 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)
对于像这样的小案例,它可行,但如果事情变得更复杂,那么它将很难管理。