2013-04-09 9 views
12

में विशिष्ट विशेष तरीकों मैं जो उपयोग "विशेष-तरीकों" वर्गों का एक समूह है:शामिल स्फिंक्स

class Foo(object): 
    "Foo docstring" 

    attr1 = "Attribute!" #: first attribute 
    attr2 = "Another Attribute!" #: second attribute 

    def __init__(self): 
     self.x = 12 

    def say_hello(self): 
     """ 
     say_hello(self) -> None 

     Issue a friendly greeting. 
     """ 
     print "Hello! x is {0}".format(self.x) 

    def __contains__(self,other): 
     """Implement ``other in self``""" 
     return other == self.x 

अब मैं इस स्फिंक्स और autodoc प्रयोग करने के लिए एचटीएमएल प्रलेखन उत्पन्न करने के लिए करना चाहते हैं। मैं स्पिंक्स को __contains__ दस्तावेज करने के लिए कैसे कहूं? मैं conf.py को

autodoc_default_flags = ['members', 'undoc-members', 'special-members'] 

जोड़ने की कोशिश की, लेकिन वह भी __dict__ जो मैं निश्चित रूप से नहीं चाहिए शामिल थे।

वर्तमान में, जैसे myproject.rst फ़ाइल देखो के प्रासंगिक अंश:

.. automodule:: myproject.foomodule 
    :members: 
    :undoc-members: 
    :show-inheritance: 

संपादित जोड़ने

.. automodule:: myproject.foomodule 
    :members: 
    :undoc-members: 
    :show-inheritance: 

.. automethod:: myproject.foomodule.Foo.__contains__ 

कि विधि के प्रलेखन जोड़ने करता है, लेकिन एक अलग खंड में - नहीं के रूप में Foo वर्ग दस्तावेज का हिस्सा।

+0

OTTOMH - मेरा मानना ​​है कि आप स्पष्ट हो सकता है और का उपयोग करने के लिए है '.. automethod :: __contains__' के रूप में मैं नहीं मानता कि' विशेष members' छानने के किसी भी रूप को स्वीकार करता है पैरामीटर –

+0

प्रश्न में उदाहरण इस विधि को दस्तावेज करने के लिए बिल्कुल एक आकर्षक केस प्रस्तुत नहीं करता है। '__contains__' को दस्तावेज करने में कोई बात नहीं है अगर यह आपको बताती है कि कोई ऑब्जेक्ट संग्रह का सदस्य है या नहीं। यह [पहले से ही पायथन में प्रलेखित है] (http://docs.python.org/3/reference/datamodel.html#object.__contains__)। आप वर्ग के लिए डॉकस्ट्रिंग में उल्लेख कर सकते हैं कि 'इन' ऑपरेटर समर्थित है। –

+0

@ जोनक्लेमेंट्स - यह करीब लगता है। मैंने उपरोक्त '..automethod' सामान के बाद' .. automethod :: myproject.foomodule.Foo .__ में__'' जोड़ा है और यह दस्तावेज़ को जोड़ा गया है, लेकिन इसे कक्षा से अलग से दस्तावेज किया गया है। – mgilson

उत्तर

3

मैं वर्तमान में इस समाधान के साथ 100% रोमांचित नहीं हूं, इसलिए मुझे उम्मीद है कि कोई इसे सुधारने के साथ आ सकता है। हालांकि, जिस तरह से मैं इस समस्या का समाधान कर लिया है निम्न करने के लिए है:

.. automodule:: myproject.foomodule 
    :members: 
    :undoc-members: 
    :show-inheritance: 

    .. autoclass:: myproject.foomodule.Foo 
     :exclude-members: attr1,attr2 

     .. autoattribute:: myproject.foomodule.Foo.attr1 

     .. autoattribute:: myproject.foomodule.Foo.attr2 

     .. automethod:: myproject.foomodule.Foo.__contains__ 

यहाँ मैं वास्तव में autodoc बताने के लिए (स्वतः) वर्ग गुण का दस्तावेजीकरण से बचने के लिए और फिर मैं उन्हें पीठ पर स्पष्ट रूप से जोड़ने की जरूरत की जरूरत है। इसका कारण यह है कि जाहिर है जब आप स्पष्ट रूप से घोंसला आदेश, explicit ones come first। अगर मैं केवल __contains__ जोड़ने के लिए स्पष्ट रूप से कहता हूं, तो यह उन विशेषताओं से पहले दिखाई देता है जिन्हें मैं पसंद नहीं करता था।

+0

क्या http://stackoverflow.com/a/21449475/832230 मदद करता है? –

11

आप जोड़ सकते हैं:

:special-members: 
:exclude-members: __dict__,__weakref__ 

.rst दायर करने के लिए विशेष के सदस्यों को दिखाने के लिए, __dict__ को छोड़कर और __weakref__

7

क्या मेरे लिए काम किया ".. automethod :: methodName जोड़ रहा है "

कक्षा की डॉकस्ट्रिंग में निर्देश .rst फ़ाइल में करने के बजाय।

तो, आप

""" 
Foo docstring 

.. automethod:: __contains__ 
""" 
+0

जानना अच्छा है। मैं (दुर्भाग्य से) अब sphinx का उपयोग करने में सक्षम नहीं हूं - इसलिए मैं इसका परीक्षण नहीं कर सकता। अगर मुझे कभी मौका मिलता है तो मैं इसे जारी रखूंगा। – mgilson

4

को "फू docstring" को बदल सकते हैं special-members विकल्प अब तर्क लेता है (इस स्फिंक्स 1.2 में एक नई सुविधा है)।

तो यह काम करना चाहिए:

.. automodule:: myproject.foomodule 
    :members: 
    :undoc-members: 
    :special-members: __contains__ 
    :show-inheritance: 
संबंधित मुद्दे