2009-03-30 13 views
58

Python'da bir C sınıfı verildiğinde, sınıfın hangi dosyanın tanımlandığını nasıl belirleyebilirim? C sınıfından ya da C örneğinden çalışabilecek bir şeye ihtiyacım var.Python'da bir sınıf için dosya yolunu nasıl alabilirim?

Bunu yapmamın nedeni, genellikle aynı klasöre ait dosyaları bir araya getirmemin bir hayranı olduğudur. Kendisini HTML olarak işlemek için Django şablonunu kullanan bir sınıf oluşturmak istiyorum. Temel uygulama, sınıfın tanımlandığı dosya adına göre şablonun dosya adını anlamalıdır.

"Base/artifacts.py" dosyasına bir sınıf LocationArtifact koyduğumu varsayalım, sonra varsayılan davranışın olmasını istiyorum. şablon adı "base/LocationArtifact.html" dir.

+0

Yinelenen: http://stackoverflow.com/questions/269795/how-do-i -Python-modül-kaynakları-yeri-kaynakları, http://stackoverflow.com/questions/602846/how-can-i-access-the-current-executing-module-or-class-name-in -python –

+0

Eğer f arıyoruz modülü bildiğiniz varsayalım ile, bir sınıf kapalı uygulamalarla çalışırken modül dizisine sahip olacağım. – Staale

cevap

82

Bunu, inspect modülünü kullanabilirsiniz:

import inspect 
inspect.getfile(C.__class__) 
+3

Sanırım bu, Sınıf için çalışacak, ancak bir örnek için değil. inspect.getfile (c .__ class__) çalışmalıdır; burada c, C örneğidir. –

+0

Haklısınız; Onu sadece sınıfta kullandım ve sadece bunun için çalışacağını varsaydım. Teşekkürler! – DNS

+0

Farklı ne yaptığımı bilmiyorum, ancak kullanmam gerekti 'getfile' yerine: 'inspect.getmodule (C .__ class __)' – AJP

24

deneyin:

import sys, os 
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__) 
5

Bu Django için yanlış bir yaklaşımdır ve gerçekten şeyler zorlayarak.

tipik Django uygulama modeli

olup:

  • /proje
    • /appname
      • models.py
      • views.py
      • /şablonlar
        • vb index.html
+0

+1: Django'nun doğal olarak ne yaptığı ve hayatın çok daha kolay olduğunu yapın. –

+0

Anlaşmalı. Django, en az "büyü" miktarına sahip çerçevelerden biridir, ancak şablonlar, şablon etiketleri ve uygulamaların kendi modellerinin bir parçası olarak bazı beklentileri vardır. Tuhaf sınıf çıkarımı yapmak zorunda kalıyorsanız, muhtemelen yanlış yöne gidiyorsunuz demektir. – Soviut

İlgili konular