Maya Python:由于Reload()而取消了方法绑定

2024-06-09 05:08:52 发布

您现在位置: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.跟踪器.初始化。如果我同时使用这两个文件,并且碰巧重载()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) 

…取决于哪个会被重新加载。以最后一个得到重新加载的作品为准,而之前重新加载的作品则被解除绑定。你知道吗

请注意,我需要重新加载这些脚本来测试我的更改。我知道一旦重新加载完成,它们将不再被解除绑定,但我需要在工作时看到我的更改。你知道吗

我该怎么办?你知道吗


Tags: 文件instanceselfnoneobjinitdefas
2条回答

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

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

对于这样一个小案例来说,它是可行的,但如果事情变得更复杂,它将很难管理。你知道吗

您可以尝试两次导入TrackingMethods,使用两个名称。你知道吗

形状:

import TrackingMethods as trm_shapes


class shape(trm_shapes.Tracker) ...

在着色器中:

import TrackingMethods as trm_shaders

class shader(trm_shaders.Tracker) ...

只要外部没有人尝试检查着色器或形状对象是否是跟踪器的实例,这应该是可行的-它将失败。你知道吗

相关问题 更多 >