2013-04-15 13 views

答えて

26

ゲッターにドキュメントストリングを書くのは、1)それはhelp(MyClass)のもので、2)それはPython docs -- see the x.setter exampleのやり方だからです。 1について

):

class C(object): 
    @property 
    def x(self): 
     """Get x""" 
     return getattr(self, '_x', 42) 

    @x.setter 
    def x(self, value): 
     """Set x""" 
     self._x = value 

そして:

>>> c = C() 
>>> help(c) 
Help on C in module __main__ object: 

class C(__builtin__.object) 
| Data descriptors defined here: 
| 
| __dict__ 
|  dictionary for instance variables (if defined) 
| 
| __weakref__ 
|  list of weak references to the object (if defined) 
| 
| x 
|  Get x 

>>> 

注セッターのドキュメント文字列 "×セット" が無視されていること。

getter関数の全プロパティ(getterとsetter)のドキュメントストリングを表示できるようにする必要があります。良いプロパティdocstringの例は次のようなものです:

class Serial(object): 
    @property 
    def baudrate(self): 
     """Get or set the current baudrate. Setting the baudrate to a new value 
     will reconfigure the serial port automatically. 
     """ 
     return self._baudrate 

    @baudrate.setter 
    def baudrate(self, value): 
     if self._baudrate != value: 
      self._baudrate = value 
      self._reconfigure_port() 
+1

ニース、Pythonのドキュメントにある例です。 –

+0

セッターはゲッターに文書化する必要があります –

0

多くの場合、プロパティはドキュメントストリングを必要とせず、その動作は自明でなければなりません。

しかし、実際にドキュメントストリングを置く必要がある場合は、ゲッターに置いてください。両方に1つを入れると、セッターからのものはとにかくpydocによって無視されます。

例えば、あなたのセット操作でいくつかのチェックを行い、おそらく例外をスローすると、その動作を文書化するためにそこにドキュメントストリングを置くことが良い共振になるでしょう。しかし、ちょうど "set/get value of spam"のようなものをdocstringとして使うのは全く役に立たない。

+2

プロパティの組み込み関数には、プロパティオブジェクトのdocstringを設定するために使用できる 'doc'パラメータがあることに注意してください。与えられていない場合(そして 'property'をデコレータとして使用していない場合)、getterのdocstringが使用されます。 – Blckknght

+0

これは 'property'をデコレータとしてではなく関数として使用する場合にのみ適用されます。そのような場合は、とにかくプロパティ用のドキュメントストリングを配置する唯一の可能性があります。 – mata

+8

私は、 "通常はプロパティにはdocstringが必要ない"という意見はありません。パブリックAPIの場合、プロパティは属性やメソッドよりも自明ではありません。はい、プロパティ(および属性と関数)には常に名前を付ける必要がありますが、APIドキュメントが重要です。 –

関連する問題