オブジェクトsrc
とオプションのオブジェクトがありますdest
。dest
関数に渡されない場合、新しい関数MyObj
が作成され、別の関数に渡されます。
mypy==0.610
これを使用することは私に与えています:
エラー:「copy_data」の引数2に互換性のないタイプ「Optional [MyObj]」があります。期待される「MyObj」
関数でdest
オプションではないMyPyにどのように伝えるの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
ここでのエラーはにありnew_obj
ます。タイプコメントにコロンがありません。私reveal_type
はあなたのMVEにいくつかを入れることによってこれを理解しました:
def new_obj(name):
# type (str) -> MyObj
# ^ ERROR is here
return MyObj(name=name)
def copy_stuff(src, dest=None, fname=None):
# type: (MyObj, Optional[MyObj], Optional[str]) -> MyObj
reveal_type(new_obj) # E: Revealed type is 'def (name: Any) -> Any'
if not dest:
reveal_type(dest) # Optional[MyObj]
dest = new_obj(fname)
reveal_type(dest) # Optional[MyObj]
my_obj = copy_data(src, dest)
return my_obj
Mypyは、をOptional[MyObj]
返す関数から割り当てられたときに型を保持しているようAny
です。タイプコメントを修正すると、期待どおりに機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加