Ich habe zwei Dateien, die die gleiche Objekt-Tracking-Methode aus einer dritten Datei importieren. Es funktioniert so etwasMaya Python: Unbound-Methode wegen 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)
Hier ist das Problem. Der Fehler tritt beim trm.Tracker auf. init. Wenn ich beide Dateien verwende und zufällig ShaderNode oder Shapes neu lade(), erkennen die Methoden des anderen nicht mehr, dass es sich um Unterklassen der ursprünglichen TrackingMethod-Klasse handelt. Durch das Nachladen verliert die andere Klasse ist es Referenz und ich entweder:
>>unbound method __init__() must be called with Tracker instance as first argument (got circle instance instead)
oder
>>unbound method __init__() must be called with Tracker instance as first argument (got ShaderThingy instance instead)
..depending, auf dem neu geladen wird. Der letzte, der neu geladen wird, funktioniert und der zuvor neu geladene wird ungebunden.
Wohlgemerkt, ich muss diese Skripte neu laden, um meine Änderungen zu testen. Ich weiß, sobald die Reloads nicht mehr da sind, sind sie nicht mehr ungebunden, aber ich muss meine Änderungen sehen, wenn ich arbeite.
Was mache ich?
Ich weiß, diese Frage ist sehr ähnlich zu einer früheren Methode nicht gebunden Frage, die ich hatte, aber die Super-Lösung hat nicht konsistent mit dem vorherigen Beispiel funktioniert, und ich denke, wissen warum jetzt. Ich habe das Problem auf die Verwendung von Nachladen beschränkt. Die Frage, denke ich, ist, ob es eine kluge Möglichkeit gibt, Ihre Skripte neu zu laden, damit andere Dateien, die dieselbe Quelldatei verwenden, nicht beschädigt werden. –