Bu modülün içinden bir modüle nasıl başvuru yapabilirim? Ayrıca, bu modülü içeren pakete nasıl başvuru yapabilirim? O modülünde bir sınıf varsaPython: Modülün içindeki bir modüle nasıl başvuru yapabilirim?
cevap
import sys
current_module = sys.modules[__name__]
oldukça doğru olmaz; Bir referansın muhafaza edilmesinin garanti edildiği herhangi bir yer olduğunu sanmıyorum, eğer varsa, yeniden yükleme gerçekten işe yaramazdı, değil mi? –
Yeniden yükleme aynı modül nesnesini yeniden kullanır; yeni modül nesnesi oluşturulmaz, bu yüzden yeniden yükleme sırasında doğrudur. – bukzor
ardından sınıfın __module__
mülkiyet sınıfının modül adıdır. Böylece modüle sys.modules[klass.__module__]
üzerinden erişebilirsiniz. Bu ayrıca işlevler için de çalışır.
Aslında, bir işlev için (en azından), '__module__' özelliği bir modül değil, bir dize; bu nedenle bir "inspect.getabsfile (func .__ modül __)", "_TypeError: 'os' bir modül, sınıf, yöntem, işlev, geri izleme, çerçeve veya kod nesnesi değil" ile başarısız olur "; inspect.getabsfile (sys.modules [o .__ module __]) ise gözüküyor. – sdaau
Teşekkürler, düzeltildi. – Michael
Sen sys.modules
sözlükte bulunabilir __name__
modül referansını kullanarak mevcut modülün ismini alabilirsiniz.
current_module = __import__(__name__)
hiçbir alma yoktur unutmayın: - zevkinize bağlıdır - basit
Python tartışmasız sys modülü almak ve yok documentationDoküman bağlantısını takdir ediyorum. –
Bir daha teknik, bakın. Python her modülü yalnızca bir kez içe aktarır.
mymod.init(mymod)
İdeal değil ama benim şimdiki kullanım örneği için çalışır:
Bu, sys'i almayı önlemenin gerçekten güzel bir yolu gibi görünüyor. Okuması biraz karşı sezgisel olmaktan başka, bu yaklaşımın herhangi bir potansiyel downsides var mı? – JeremyDouglass
@JeremyDouglass. Bildiğim kadarıyla değil. __import__, yasal, belgelenmiş, yerleşik bir işlevdir (yalnızca __xx__ işlevi). Bunu 'importlib' paketi ile değiştirebilirsiniz (içe aktarmanız gerekir). Belki - bana hiç olmadı - göreceli/mutlak içe aktarma ile ilgili bir sorun olabilir, eğer sys.path içinde aynı isme sahip bir modül varsa, bu durumda fonksiyonu 'seviye' argümanıyla çözebilirsiniz. – Uri
Sen ondan dışında geçirebilirsiniz.
- 1. Bir Fragman içindeki LocationManager'a nasıl başvuru yapılır
- 2. Bir .net uygulamasında sınıflara nasıl başvuru yapabilirim?
- 3. C# içindeki bir tamsayıya nasıl başvuru yapılır?
- 4. Perl'de belirli karma değere nasıl başvuru yapabilirim?
- 5. Bir modülün içindeki bir sınıf için fabrikaların tanımlanması
- 6. Hangi modüle Moose yüklediğini nasıl anlarım?
- 7. ControlValueAccessor'u uygulayan bir bileşenden FormControl'e nasıl başvuru yapabilirim?
- 8. Bir python projesinde Scrapy taramasını nasıl yapabilirim?
- 9. Python - Bir modülün özel yükleyici tarafından yüklendiğini nasıl anlarsınız?
- 10. Modülün denetleyici işlevini, tamamen ayrı bir modülün denetleyicisinden nasıl ararsınız?
- 11. Python - Alt modüllerini almak için bir modülün takma adını nasıl kullanabilirsiniz?
- 12. leiningen ile başka dosyalardaki işlevlere nasıl başvuru yapabilirim?
- 13. Not defterlerinde, mevcut tüm oturumlara nasıl başvuru yapabilirim?
- 14. Tıklanan çokgen için nasıl başvuru yapabilirim? (google maps api v3)
- 15. Angular2 bileşeninin CSS'sinde ana makine öğesine nasıl başvuru yapabilirim?
- 16. Python: İçe aktarılan bir modülün mutlak yolunu bulun
- 17. Intellij'de bir modülün başka bir modülün testlerine bağlı olması mümkündür
- 18. Geçerli modüle OCaml'de başvurma
- 19. Python: Test paketimde geçici dosyaları nasıl yapabilirim?
- 20. Bir modülün örnek değişkenlerini Ruby'de nasıl ilklendirebilirim? .
- 21. Belirli bir modüle bağlı olarak yerel olarak kurulmuş bir npm modülü nasıl bulunur?
- 22. Bıyık şablonunda bir nokta içeren bir alan adına nasıl başvuru yapabilirim?
- 23. Python ile bir web sitesine nasıl giriş yapabilirim?
- 24. Python kullanarak bir web sitesine nasıl giriş yapabilirim?
- 25. Bu python komut satırını bash'deki bir takma adı nasıl yapabilirim?
- 26. Magento'daki bir modülün genel yolu
- 27. Python
- 28. Bir başvuru başvurusuna nasıl erişilir
- 29. python içindeki request.get komutunu nasıl durduracağım
- 30. AngularJS - Nesne verisini modüle geçirme
Bu soruyu soruyor olabileceğinizden şüpheleniyorum çünkü ** modül kapsamında bir değişkeniniz var ** (örneğin, BLAH = bir işlev veya sınıf dışında 10), sonra bir ** sınıf/fonksiyon değişkeni ** BLAH olarak adlandırılır ve ayırt etmek istiyorsun. Burada geçerli bir soru şudur: ** Bu gerekli midir? ** Kapsam kuralları, özellikle de sizin kodunuzu alan (örneğin 6 ay sonra) 'aptal' tarafından yanlışlıkla hataya eğilimlidir. Bunun gibi hileler nadiren gereklidir; Onlardan tamamen uzak durmaya çalışırım çünkü daha sonra kafa karıştırıcı ve yanlış bir şekilde modifiye edilirler. –
@ KevinJ.Rice "Kodunuzu sizden sonra alan 'salak' (yani, 6 ay sonra)" günümü kutladı! – arctelix
Soruyu neden sorduğuna kim bakıyor? Bunu yapmak için birçok geçerli sebep vardır. Modül yeniden yüklenirse, bunun haricinde –