2009-05-21 17 views
29
  • नाम कोड चल रहा है
  • वर्ग का नाम कोड चल रहा है
  • विधि (वर्ग की विशेषता) का नाम जहां कोड

उत्तर

31

यहाँ प्रत्येक का एक उदाहरण है:

from inspect import stack 

class Foo: 
    def __init__(self): 
     print __file__ 
     print self.__class__.__name__ 
     print stack()[0][3] 

f = Foo() 
+2

क्या आप इसे कमांड लाइन से चलाने की कोशिश कर रहे हैं? यह स्पष्ट रूप से तब परिभाषित नहीं किया गया है; कोड के साथ फ़ाइल बनाने और पायथन फ़ाइल नाम करने का प्रयास करें - यह अपेक्षित के रूप में काम करेगा। –

+0

इसे फ़ाइल से चलाएं – mtasic85

+2

inspect.currentframe क्यों नहीं? – tzot

5
self.__class__.__name__ # name of class i'm in 
चल रहा है जहां से जहां से आराम के लिए

सिस और ट्रेस मॉड्यूल

http://docs.python.org/library/sys.html http://docs.python.org/library/trace.html

कुछ अधिक जानकारी: https://mail.python.org/pipermail/python-list/2001-August/096499.html और http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

आप यह त्रुटि रिपोर्टिंग के लिए करना चाहता था क्योंकि ट्रैस बैक मॉड्यूल है कि संभाल कर सकते हैं:

http://docs.python.org/library/traceback.html

9
import sys 

class A: 
    def __init__(self): 
     print __file__ 
     print self.__class__.__name__ 
     print sys._getframe().f_code.co_name 

a = A() 
4

बहुत सावधान रहें। पर विचार करें:

class A: 
    pass 

B = A 
b = B() 

b यहां की 'क्लास नाम' क्या है? क्या यह ए, या बी है? क्यूं कर?

बिंदु यह है कि आपको जानना या देखभाल करने की आवश्यकता नहीं है। एक वस्तु यह है कि यह क्या है: इसका नाम बहुत ही कम उपयोगी है।

+4

कक्षा का नाम 'ए' है क्योंकि' बी' 'बी 'का ** इंस्टेंस ** है जो बदले में ** संदर्भ ** ** ए' है जो ** ** ** है। – ted

+0

उपयोगकर्ताओं को समाप्त करने के लिए निश्चित रूप से; लेकिन डिबगिंग के दौरान बेहद उपयोगी - जैसे अपवाद हैंडलर या रिपोर्ट के समान, जहां यह है। आप एक ही बात कहने के लिए एक अच्छा त्रुटि संदेश लिख सकते हैं, लेकिन इसमें अक्सर यह जानकारी होगी, इस मामले में यह हर बार टाइप करने के लिए कचरा लगता है। साथ ही, एक सामान्य लॉगिंग पैकेज (उदाहरण के लिए) बनाने के लिए, यह स्वचालित रूप से इसे प्रदान करने में सक्षम होने के लिए बेहद उपयोगी है। यदि आपका तर्क आयोजित होता है, तो क्या यह भी इंस्टेंसेंस() के साथ ही लागू नहीं होगा, जो निश्चित रूप से महत्वपूर्ण और उपयोगी है? – TextGeek

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