Aynı dizinde yaşayan birkaç Jython modemi var.Neden Jython sınıfımı içe aktarılmış bir modülde kullanamıyorum?
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"
Ben örneğini kendi modülü içinde sadece ince bu sınıfı çalıştırabilirsiniz: Bunlardan biri şu sınıfını tanımlar. Ancak, farklı bir Jython modülünün içine modülü almak ve MyTask() örneğini çalıştığınızda, aşağıdaki hatayı alıyorum:
Runnable .__ init __ (self) AttributeError: Sınıf Runnable hiçbir özellik '__init__' vardır
Burada yanlış olan ne yapıyorum? Bu kod neden sınıfımın tanımlandığı modülde geçerli, ancak bu sınıfı başka bir modüle içe aktardığımda geçerli değil? O To sorun Runnable bir arayüz olduğunu ve bu nedenle hiçbir yapıcı olmasıdır ileri sürmüşlerdir:
Düzenleme (I "modulename ithalat MyTask gelen" diğerlerinden ziyade "ithal modulename" ile aktarıyorum) Ben Bunu biliyorum ama bu durumu tam olarak açıklamıyor. Sorunun en önemli noktası, 'un numaralı telefonun tanımlanabildiği modüldeki bu sınıfı başlatmasıdır, ancak ,'u başka bir modüle içe aktaramaz ve orada başlatır. yani mytask_module olarak
: other_module olarak
# this works
if __name__ == '__main__':
task = MyTask() # works!
thread = Thread(task)
thread.start()
:
# this throws AttributeError
if __name__ == '__main__':
import mytask_module
task = mytask_module.MyTask() # raises AttributeError
thread = Thread(task)
thread.start()
Şimdi karışıklık görüyorsunuz? Sorun sadece anlattığınız gibi olsaydı, önceki örnekte ayrıca bir AttributeError öğesi de yükseltilmeli, ancak değil. Sadece iyi çalışıyor.
# Düzenle # 2: Görünüşe göre bu, bağımsız bir komut dosyasında çalışıyor, ancak Eclipse/Pydev ortamımda değil. Yani asıl soru, neden Pydev'in bunu yapmama izin vermesidir. Bu kendi Pydev/Eclipse ortamında herkes için çalışıyorsa, lütfen bana bildirin.
Eh, ben modül içinden bu kodu çağırabilirsiniz: taban sınıfı java bir arabirim ise
, hiçbir yapıcı (hayır
__init__
) mevcut ve bir olsun Bu olamaz. Jython'un bu kodu geçerli kılmak için yaptıklarından emin değilim, ancak başka yerlerde de kullandığını gördüm. – Jeff