मेरे पास एक मॉड्यूल है जिसमें @property
होना चाहिए, मैंने मॉड्यूल के रूप में कक्षा सेट करके इसे हल किया। मुझे इस जवाब से विचार मिला: Lazy module variables--can it be done?स्फिंक्स दस्तावेज़ मॉड्यूल गुण
मैं चाहता था कि यह दोहराने योग्य और उपयोग में आसान हो ताकि मैंने इसके लिए मेटाक्लास बनाया हो। यह एक आकर्षण की तरह काम करता है।
समस्या यह है कि जब स्पंजिक्स का उपयोग प्रलेखन गुण उत्पन्न करने के लिए दस्तावेज नहीं मिलता है। बाकी सब कुछ अपेक्षित के रूप में दस्तावेज है। मुझे नहीं पता कि इसे कैसे ठीक किया जाए, शायद यह स्फिंक्स के साथ एक समस्या है?
मॉड्यूल:
import sys
import types
class ClassAsModule(type):
def __new__(cls, name, bases, attrs):
# Make sure the name of the class is the module name.
name = attrs.pop('__module__')
# Create a class.
cls = type.__new__(cls, name, bases, attrs)
# Instantiate the class and register it.
sys.modules[name] = cls = cls(name)
# Update the dict so dir works properly
cls.__dict__.update(attrs)
class TestClass(types.ModuleType):
"""TestClass docstring."""
__metaclass__ = ClassAsModule
@property
def some_property(self):
"""Property docstring."""
pass
def meth():
"""meth doc"""
pass
और एक कॉपी-पेस्ट उत्पन्न करने के लिए/देखने स्फिंक्स प्रलेखन:
sphinx-apidoc . -o doc --full
sphinx-build doc html
xdg-open html/module.html
सबसे जरूरी हिस्सा वर्ग 'गुण दस्तावेज़ के लिए है। मूल मॉड्यूल सदस्यों को दस्तावेज करने के लिए बोनस अंक भी।
संपादित करें: कक्षा को मॉड्यूल के रूप में दस्तावेज किया जाना चाहिए। कक्षा इस तरह प्रयोग की जाती है और इस प्रकार स्फिंक्स में इस तरह दिखाई देनी चाहिए।
वांछित आउटपुट का उदाहरण:
Module Foo
TestClass docstring.
some_property
Property docstring.
meth()
meth doc
संपादित करें 2: मैं कुछ है कि एक समाधान खोजने में सहायता कर सकते हैं पाया। जब निम्नलिखित सामग्री के साथ एक नियमित रूप से मॉड्यूल foo
होने:
#: Property of foo
prop = 'test'
स्फिंक्स दस्तावेज इस तरह:
foo.prop = 'test'
Property of foo
एक ही काम करता है अगर prop
एक वर्ग की एक विशेषता है। मुझे पता नहीं चला है कि यह मेरे विशेष मामले में क्यों काम नहीं करता है।
आपका कोड काम नहीं करता है। 'मोडमेता' परिभाषित नहीं है। क्या आप कृपया काम कोड पोस्ट कर सकते हैं? – jterrace
@jterrace कॉपी-पेस्ट विफल। अब तय किया गया है ;-) – siebz0r
मेरा उत्तर हटा दिया गया क्योंकि आपके मूल कोड में '__metaclass__' के बजाय' __metaclass_' था, जिससे यह काम नहीं कर रहा था। – jterrace