3

Pythonで次のオープンソースコードを見つけました。

class Wait:

  timeout = 9

  def __init__(self, timeout=None):

    if timeout is not None:
        self.timeout = timeout
    ...

上記のコードとデフォルトの引数の値を使用することの利点があるかどうかを理解しようとしています。

class Wait:

   def __init__(self, timeout=9):
     ...
4

2 に答える 2

12

次のようにデフォルト値を変更することができます。

Wait.timeout = 20

設定されていない場合、デフォルトは20になります。

例えば:

>>> class Wait:
...     timeout = 9
...     def __init__(self, timeout=None):
...         if timeout is not None:
...             self.timeout = timeout
... 
>>> a = Wait()
>>> b = Wait(9)
>>> a.timeout
9
>>> b.timeout
9
>>> Wait.timeout = 20
>>> a.timeout
20
>>> b.timeout
9

これは、Pythonがインスタンス属性を見つけられない場合にクラス属性を探すという事実を利用しています。

于 2012-05-05T21:47:57.760 に答える
0

意味的には、クラス属性は、デフォルトのタイムアウトをクラスのパブリックインターフェイスの一部にするようなものです。ドキュメントによっては、エンドユーザーがデフォルトを読むか、場合によっては変更するように促される場合があります。

代わりにデフォルトのパラメータ値を使用することは、特定のデフォルト値が実装の詳細であり、クラスのエンドユーザーによっていじられるべきではないことを強く示唆しています。

于 2012-05-05T22:06:00.020 に答える