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 回答