【发布时间】:2018-06-11 18:48:54
【问题描述】:
我有一个对象src 和一个可选对象dest。如果dest 没有传递给函数,则创建一个新的MyObj 并将其传递给另一个函数。
使用mypy==0.610 这是给我的:
错误:“copy_data”的参数 2 具有不兼容的类型“Optional[MyObj]”;预期“MyObj”
我如何告诉 MyPy dest 在 copy_data 函数中不是可选的?
from typing import Optional
class MyObj(object):
def __init__(self, name):
self.name = name
def new_obj(name):
# type (str) -> MyObj
return MyObj(name=name)
def copy_stuff(src, dest=None, fname=None):
# type: (MyObj, Optional[MyObj], Optional[str]) -> MyObj
if not dest:
dest = new_obj(fname)
my_obj = copy_data(src, dest)
return my_obj
def copy_data(src, dest):
# type: (MyObj, MyObj) -> MyObj
return dest
【问题讨论】:
-
如果您在
copy_stuff中创建一个单独的局部变量来保存MyObj实例,是否仍然会引发错误? -
啊,真的很高兴
dest = dest or new_obj(fname) -
这似乎是我的类型检查。你能提供一个最小的可重复样本吗?你用的是什么版本的 mypy?
-
@ethanhs 我在
v0.610添加了一个对我来说失败的 MVE -
为什么要检查
not dest而不是dest is not None?