Ich habe ein paar Jython-Module im selben Verzeichnis. Einer von ihnen definiert die folgende Klasse:Warum kann ich meine Jython-Klasse nicht in einem importierten Modul verwenden?
from java.lang import Runnable
class MyTask(Runnable):
def __init__(self, params):
Runnable.__init__(self)
self._params = params
def run(self):
# do stuff
print "Done doing stuff"
Ich kann diese Klasse in Ordnung in diesem eigenen Modul ausführen und ausführen. Allerdings, wenn ich importieren das Modul in ein anderes Jython Modul und versuchen MyTask() zu instanziiert, erhalte ich folgende Fehlermeldung:
Runnable .__ init __ (self) Attribute: Klasse Runnable hat kein Attribut '__init__'
Was mache ich hier falsch? Warum ist dieser Code innerhalb des Moduls gültig, in dem meine Klasse definiert ist, aber nicht, wenn ich diese Klasse in ein anderes Modul importiere? (Ich bin der Import mit „Import modul“ anstatt mit „von modul Import MyTask“)
bearbeiten: Für diejenigen, die vorgeschlagen haben, dass das Problem ist, dass Runnable eine Schnittstelle und hat daher keinen Konstruktor: I weiß das, aber es erklärt diese Situation nicht vollständig. Der Kernpunkt der Frage ist, dass ich kann instanziieren diese Klasse innerhalb des Moduls, wo es definiert ist, aber ich kann nicht importieren Sie es in ein anderes Modul und instanziieren es dort. das heißt
In mytask_module:
# this works
if __name__ == '__main__':
task = MyTask() # works!
thread = Thread(task)
thread.start()
In other_module:
# this throws AttributeError
if __name__ == '__main__':
import mytask_module
task = mytask_module.MyTask() # raises AttributeError
thread = Thread(task)
thread.start()
Jetzt sehen Sie die Verwirrung? Wenn das Problem so war, wie Sie es beschrieben haben, dann sollte das vorherige Beispiel auch einen AttributeError auslösen, tut es aber nicht. Es läuft gut.
Bearbeiten # 2: Anscheinend funktioniert das in einem eigenständigen Skript, aber nicht in meiner Eclipse/Pydev-Umgebung. Die wirkliche Frage ist also, warum ließ mich Pydev das nicht tun. Wenn dies für jeden in seiner eigenen Pydev/Eclipse-Umgebung funktioniert, lass es mich wissen.
Nun, wie ich schon sagte, kann ich von innerhalb des Moduls, dass Code aufrufen, so das kann nicht sein. Ich bin mir nicht sicher, was Jython macht, um diesen Code gültig zu machen, aber ich habe gesehen, dass er auch anderswo verwendet wird. – Jeff