use*_*531 11 python typing python-2.7
__init__python中函数的正确类型注释是什么?
class MyClass:
...
Run Code Online (Sandbox Code Playgroud)
以下哪项更有意义?
def __init__(self):
# type: (None) -> None
def __init__(self):
# type: (MyClass) -> MyClass
def __init__(self):
# type: (None) -> MyClass
Run Code Online (Sandbox Code Playgroud)
因为我们通常会实例化为myclass = MyClass(),但__init__函数本身没有返回值.
rem*_*ram 18
self当注释作为注释给出时,应该从注释中省略,并且__init__()应该标记为-> None.这都是在PEP-0484中明确指定的.
如果您使用的是 Python 3(我希望您这样做),则自 mypy 0.641 发布以来根本不需要注释__init__方法,如果至少有一个带注释的参数,则它必须始终是None,因为它什么也不返回。在其他情况下,mypy 会引发错误。这种行为多年来一直困扰着人们,但最终得到了解决。
吉多是这样说的:
\n\n\n新功能:允许省略返回类型现在
\n__init__\n可以省略带注释的方法的返回类型__init__\n而不会收到错误消息。例如:Run Code Online (Sandbox Code Playgroud)\nclass Circuit:\n def __init__(self, voltage: float):\n self.voltage = voltage\n在以前的 mypy 版本中,这会引发错误消息:
\nRun Code Online (Sandbox Code Playgroud)\nerror: The return type of "__init__" must be None\n这个错误很烦人,因为 \n 唯一合法的返回声明
\n__init__是 -> None,所以我们 \xe2\x80\x99 删除了它。请注意,这仅在存在\xe2\x80\x99s 至少一个带注释的参数时才有效!对于__init__没有\n参数的方法,您仍必须添加 -> None,否则该方法\n将被视为无类型,并且根本不会对其主体进行类型检查。\n示例:Run Code Online (Sandbox Code Playgroud)\nclass UntypedExample:\n # This method is not type-checked at all!\n def __init__(self):\n self.voltage = 0.0\n\nclass TypedExample:\n # This is how to ensure that a 0-argument __init__ is type-checked:\n def __init__(self) -> None:\n self.voltage = 0.0\n
相关讨论:
\n\n| 归档时间: |
|
| 查看次数: |
4512 次 |
| 最近记录: |