अजगर डॉकस्ट्रिंग में वर्ग विधि से लिंक


90

मैं अपनी कक्षा में एक विधि के लिंक को उसी कक्षा की दूसरी विधि के docstring के भीतर जोड़ना चाहता हूं। मैं चाहता हूं कि स्फिंक्स और अधिमानतः स्पाईडर और अन्य पायथन आईडीई में काम करने के लिए लिंक।

मैंने कई विकल्पों की कोशिश की और केवल एक ही पाया जो काम करता है, लेकिन यह बोझिल है।

मान लीजिए कि निम्नलिखित संरचना में mymodule.py

def class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'

मैंने निम्न विकल्पों की कोशिश की <link to foo>:

  • : समारोह: `foo`
  • : समारोह: `self.foo`
  • : समारोह: `MyClass.foo`
  • : समारोह: `mymodule.MyClass.foo`

केवल एक ही जो प्रभावी रूप से एक लिंक का उत्पादन करता है वह है: func: `mymodule.MyClass.foo`, लेकिन लिंक के रूप में दिखाया गया है mymodule.MyClass.foo()और मुझे एक लिंक चाहिए जो foo()या के रूप में दिखाया गया है foo
ऊपर दिए गए विकल्पों में से कोई भी स्पाइडर में लिंक नहीं बनाता है।

आपकी सहायता के लिए धन्यवाद।


"भीतर से ... जोड़ें" का क्या अर्थ है ??? लिंक और हाइपरलिंक में क्या अंतर है?
चश्मदीद

मैंने भ्रम से बचने के लिए प्रतिस्थापित hyperlinkकिया link
सरोले

मैं अभी भी आपके प्रश्न को बहुत अच्छी तरह से नहीं समझ पाया हूं क्या आपका मतलब है कि आप प्रदर्शन करना चाहते हैं, स्फिंक्स से या स्पाइडर से या दूसरों से पायथन आईडीई, फ़ंक्शन के डॉकस्ट्रिंग का एक पूछताछ barजो आपको "फ़ंक्शन या आपके द्वारा खोज की जाने वाली विधि फू है" की जानकारी देगा ?
eyquem

दूसरे, क्या फर्क आप के बीच कर सकता हूँ mymodule.MyClass.foo()और foo()? और आप "डिस्प्ले" को क्या कहते हैं ? क्या यह एक तार का प्रदर्शन है? या आप एक वस्तु वापस चाहते हैं? इस बाद के मामले में, के अंत में पेन mymodule.MyClass.foo()और foo()बहुत अधिक हैं।
पलक

भ्रम के लिए खेद है, हमेशा एक प्रश्न को स्पष्ट रूप से समझाना मुश्किल है। मुझे बस एक लिंक चाहिए, जिसे आप क्लिक कर सकते हैं, जो आपको फू () आईडीई के प्रलेखन विंडो में या स्फ़िंक्स के HTML निर्माण में डॉकस्ट्रिंग में ले जाएगा। कोष्ठकों के बारे में: वे सही हैं:: फंक: mymodule.MyClass.fooजिसके परिणामस्वरूप कोष्ठक हैं। और मैंने सवाल को थोड़ा फिर से दोहराया है।
सरोले

जवाबों:


91

स्फिंक्स के लिए जो समाधान काम करता है वह संदर्भ के साथ उपसर्ग करना है ~

क्रॉस-रेफ़रिंग सिंटैक्स पर स्फिंक्स प्रलेखन के अनुसार ,

यदि आप सामग्री को ~ के साथ उपसर्ग करते हैं, तो लिंक टेक्स्ट केवल लक्ष्य का अंतिम घटक होगा। उदाहरण के लिए: py: meth: ~Queue.Queue.getQueue.Queue.get को संदर्भित करेगा लेकिन केवल लिंक टेक्स्ट के रूप में प्रदर्शित होता है।

तो इसका उत्तर है:

class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as :func:`~mymodule.MyClass.foo`"""
        print 'foo'

HTML में यह इस तरह दिखता है: This method does the same as foo()और foo()लिंक है।

हालाँकि, ध्यान दें कि यह स्पाइडर में लिंक के रूप में प्रदर्शित नहीं हो सकता है।


15
( यहां स्पाइडर देव ) @saroele I की भविष्य में इस स्थिति को सुधारने की योजना है। मैं पूरी तरह सहमत हूं कि यह वास्तव में अच्छा होगा;)
कार्लोस कॉर्डोबा

यह वास्तव में बहुत अच्छा है, इसके लिए उत्सुक है। स्पाइडर पर आपके सभी काम के लिए धन्यवाद!
सरोले

आप इसे :any:भूमिका के साथ कर सकते हैं - नोट के बारे में देखें default_setting
n

1
क्या पूर्ण मॉड्यूल पथ का उपयोग किए बिना क्रॉस-रेफरेंस संभव है?
जोनाथन

2
इसके बजाय :func:, मैंने पाया कि यह होना चाहिए :meth:
सिंह फेंग

38

यदि आप मैन्युअल रूप से उस लिंक का पाठ निर्दिष्ट करना चाहते हैं जिसका आप उपयोग कर सकते हैं:

:func:`my text <mymodule.MyClass.foo>`

अधिक जानकारी के लिए, चेक -रेफरिंग पायथन ऑब्जेक्ट्स


यह काम करता है, धन्यवाद। लिंक को देखकर, मुझे पता चला कि संदर्भ के साथ उपसर्ग ~करना मेरी आवश्यकता के करीब है। मैंने इसे एक अलग उत्तर में रखा है। हालांकि यह अभी भी स्पाइडर में काम नहीं करता है ...
सरोले

-4

यह मुझे लगता है कि आपको जो कुछ भी चाहिए उसे प्राप्त करने के लिए आपको बस अपनी अभिव्यक्ति को जोड़ना __name__या जोड़ना होगा __doc__
मैं अभी भी सही ढंग से लक्ष्य को समझ नहीं पाया हूं

class MyClass():
    def foo(self):
        """I am the docstring of foo"""
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'

print
print MyClass.foo
print MyClass.foo.__name__
print MyClass.foo.__doc__
print
print MyClass.__dict__['foo']
print MyClass.__dict__['foo'].__name__
print MyClass.__dict__['foo'].__doc__

परिणाम

<unbound method MyClass.foo>
foo
I am the docstring of foo

<function foo at 0x011C27B0>
foo
I am the docstring of foo

1
मुझे लगता है कि आप प्रश्न के बिंदु से चूक गए: मैं Sphinx द्वारा निर्मित मेरे प्रलेखन के HTML में एक लिंक (हाइपरलिंक) रखना चाहता हूं।
सरोले

आप सही कह रहे हैं, मुझे बात याद आती है। और ऐसा इसलिए है क्योंकि मैं स्फिंक्स नहीं जानता। इसलिए मैंने स्फिंक्स को स्थापित करने की कोशिश की। लेकिन मैं सफल नहीं हुआ। मैं विंडोज पर हूं और मैंने डॉक्स में कहा गया स्फिंक्स-क्विकस्टार्ट का उपयोग करने की कोशिश की है। लेकिन मुझे लगता है कि मुझे इनटसलेशन प्रक्रिया की गलतफहमी है। मैं आपकी मदद नहीं कर सकता, क्षमा करें। मुझे पता नहीं है कि स्फिंक्स के संदर्भ में 'हाइपरलिंक' से क्या समझना चाहिए।
eyquem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.