2009-03-30 11 views
58

पायथन में कक्षा सी को देखते हुए, मैं कैसे निर्धारित कर सकता हूं कि कक्षा में किस फ़ाइल को परिभाषित किया गया था? मुझे कुछ ऐसा चाहिए जो कक्षा सी से या सीपायथन में कक्षा के लिए फ़ाइलपैथ कैसे प्राप्त करूं?

कारण से मैं कर रहा हूं, क्योंकि मैं आम तौर पर एक ही फ़ोल्डर में एक साथ फाइलों को रखने से प्रशंसक हूं। मैं एक वर्ग बनाना चाहता हूं जो खुद को HTML के रूप में प्रस्तुत करने के लिए Django टेम्पलेट का उपयोग करता है। बेस कार्यान्वयन को उस फ़ाइल नाम के आधार पर टेम्पलेट के लिए फ़ाइल नाम का अनुमान लगाना चाहिए जिसमें कक्षा परिभाषित की गई है।

कहें कि मैंने "base/artifacts.py" फ़ाइल में एक क्लास स्थान आर्टिफैक्ट डाला है, तो मैं डिफ़ॉल्ट व्यवहार होना चाहता हूं कि टेम्पलेट का नाम "आधार/स्थान Artifact.html" है।

+0

डुप्लिकेट: http://stackoverflow.com/questions/269795/how-do-i -इंड-द-लोकेशन-ऑफ-पायथन-मॉड्यूल-स्रोत, http://stackoverflow.com/questions/602846/how-can-i-access-the-current-executing- मॉड्यूल- या-class-name-in -पिथॉन –

+0

वे मानते हैं कि आप उस मॉड्यूल को जानते हैं जिसे आप देख रहे हैं इसके लिए, मेरे पास मॉड्यूल स्ट्रिंग होगी क्योंकि मैं कक्षा से कार्यान्वयन के साथ काम करता हूं। – Staale

उत्तर

82

आप इस तरह, inspect मॉड्यूल का उपयोग कर सकते हैं:

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

मुझे लगता है कि यह कक्षा के लिए काम करेगा, लेकिन उदाहरण के लिए नहीं। inspect.getfile (सी .__ कक्षा__) काम करना चाहिए, जहां सी सी –

+0

का उदाहरण है आप सही हैं; मैं इसे कभी भी कक्षा में इस्तेमाल करता था, और सिर्फ यह मानता था कि यह उदाहरणों के लिए काम करेगा। धन्यवाद! – DNS

+0

यह सुनिश्चित नहीं है कि मैं अलग-अलग क्या कर रहा था लेकिन 'गेटफाइल' के बजाय मुझे इसका उपयोग करना पड़ा: 'inspect.getmodule (सी .__ कक्षा __)' – AJP

24

कोशिश:

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

यह Django के लिए गलत तरीका है और वास्तव में बातें मजबूर।

ठेठ Django एप्लिकेशन पैटर्न है:

  • /परियोजना
    • /APPNAME
      • models.py
      • views.py
      • /टेम्पलेट्स
        • index.html
        • आदि
+0

+1: जो डीजेगो स्वाभाविक रूप से करता है और जीवन इतना आसान है। –

+0

सहमत हुए। Django कम से कम "जादू" के साथ ढांचे में से एक है, लेकिन टेम्पलेट्स, टेम्पलेट टैग और ऐप्स के पास उनके पैटर्न के हिस्से के रूप में कुछ उम्मीदें हैं। यदि आपको निराला वर्ग अनुमान करना है तो आप शायद गलत दिशा में जा रहे हैं। – Soviut

संबंधित मुद्दे

 संबंधित मुद्दे