我在 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):
...
我在 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):
...
可以通过这种方式更改默认值:
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 在找不到实例属性时会查找类属性的事实。
从语义上讲,类属性就像将默认超时设置为类的公共接口的一部分。根据文档,可能会鼓励最终用户阅读或可能更改默认值。
相反,使用默认参数值强烈表明特定的默认值是一个实现细节,不要被类的最终用户摆弄。