2017-03-08 3 views
0

3つ目のファイルから同じオブジェクトトラッキングメソッドをインポートする2つのファイルがあります。これはこのようなものですMaya Python:Reload()によるアンバインドメソッド

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で発生します。 初期。私が両方のファイルを使用していて、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を2回、2つの名前でインポートできます。

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

私はステージ管理が難しいと思う。新しいタブを作成するたびに、新しいファイルが必要な部分を作成するたびに、これらのトラッキングモジュールをロードする必要があります。ここで解決策がないように感じ、__init__を使用しないようにトラッキング全体を書き直すか、5k行のコードで1つの巨大なトラッキングファイルを作成する必要があります。これは非常に非常にイライラしています。 –

関連する問題