3

コードを考えてみましょう:

class MyClass(object):
  '''
  Keep track of file and its path on disk
  '''

  def __init__(self):
    self.file = None
    self.path = None

すべてのプロパティにdoc-stringを追加したいと思います。だから、私は(ファイルプロパティのために)次のようなことをすることができます:

class MyClass(object):
  ...

  @property
  def file(self):
    '''
    this is a doc-string for file property
    '''

    return self._file

  @file.setter
  def file(self, value):
    self._file = value

  @file.deleter
  def file(self):
    del self._file

ただし、プロパティごとにgetter、setter、deleterメソッドを作成するのは面倒です。実際、これらのメソッド(上記のように)はデフォルトの仕事をします。

プロパティにdoc-stringのみを追加する簡単な方法はありますか?

4

5 に答える 5

2

さて、いつでも独自の記述子を作成して、ドキュメントを作成し、他の操作を標準的な方法で実装できます。

class DocProperty(object):

    def __init__(self, doc=None):
        self._values = {}
        self.__doc__ = doc

    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        return self._values[obj]

    def __set__(self, obj, value):
        self._values[obj] = value

    def __delete__(self, obj):
        del self._values[obj]

次に、次のように使用します。

class SomeClass(object):

    p1 = DocProperty('some docs')

print SomeClass.p1.__doc__
# some docs
c = SomeClass()
c.p1 = 2
print c.p1
# 2
del c.p1

ただ、個人的にはやり過ぎだと思います。コードで必要な場合は、コンストラクターでコメントを使用します。すべての自動ドキュメント ジェネレーターは、何らかの方法で単純な Python 属性のコメントもサポートしています。

于 2012-02-15T15:21:24.293 に答える
1

これは、DzinX の DocProperty クラスの修正バージョンです。

class DocProperty(object):

    def __init__(self, name, doc):
        self._name = '_'+name
        self.__doc__ = doc

    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        return getattr(obj, self._name)

    def __set__(self, obj, value):
        setattr(obj, self._name, value)

    def __delete__(self, obj):
        delattr(obj, self._name)

使用法:

class SomeClass(object):
    p1 = DocProperty('p1', 'some docs')

ただし、これを使用するとコードの効率が低下することに注意してください。すべての属性アクセスがより高価になります。しかし、状況によっては、ドキュメントを追加する機能に価値があるかもしれないと思います (特に、状況で効率が問題にならない場合)。

于 2012-02-15T15:52:34.933 に答える
0

それを検索しているかどうかはわかりませんが、ドキュメントシステムにSphinxを使用している場合は、次の構文でプロパティdocを配置できます。

class MyClass(object):
  '''
  Keep track of file and its path on disk
  '''

  def __init__(self):
    #: this is doc for file
    self.file = None

    #: this is the documentation for path
    #: on multiple line too.
    self.path = None
于 2012-02-15T15:23:17.927 に答える
0

epydoc (コードの API を説明する Web ページを生成する)などのツールを使用して API ドキュメントを生成する場合は、変数 docstringsを使用できます。しかし、docstring をインタラクティブ/リフレクティブに使用できるようにしたい場合は、DzinX の回答がおそらく最適です。

于 2012-02-15T15:25:01.393 に答える