ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 键入:声明输入时不兼容的类型.Type []

2019-07-06 00:55:54  阅读:604  来源: 互联网

标签:python typing mypy


对于以下代码

# -*- coding: utf-8 -*-
import typing


class A(object):
    pass

class B(A):
    pass

class C(A):
    pass

class D(A):
    pass

class E(A):
    pass

MAPPING_X = {
    B: 'b',
    C: 'c',
}
MAPPING_Y = {
    D: 'd',
    E: 'e',
}

all_mappings = {}  # type: typing.Dict[typing.Type[A], str]
all_mappings.update(MAPPING_X)
all_mappings.update(MAPPING_Y)

mypy返回以下错误(python 3.4):

t.py:30: error: Argument 1 to "update" of "dict" has incompatible type Dict[type, str]; expected Mapping[Type[A], str]
t.py:31: error: Argument 1 to "update" of "dict" has incompatible type Dict[type, str]; expected Mapping[Type[A], str]

我不明白如何指定我想要A的子句作为Dict键.如何申报类型?

解决方法:

我可能不理解打字和mypy模块是如何工作的,但是这里似乎存在某种错误.如果我这样做(例子改编自docs的typing.Type部分):

import typing

class User(): pass
class BasicUser(User): pass

def make_new(u: typing.Type[User]) -> User:
    return u()

x = make_new(BasicUser)

没有mypy错误.如果我这样做:

import typing

class A():
    pass

MAPPING_X = {
    A: 'a',
}
all_mappings = {}  # type: typing.Dict[typing.Type[A], str]
all_mappings.update(MAPPING_X)

也没有错误.但是,这确实会产生mypy错误:

import typing

class A():
    pass

class B(A):
    pass

MAPPING_X = {
    A: 'a',
    B: 'b',
}

all_mappings = {}  # type: typing.Dict[typing.Type[A], str]
all_mappings.update(MAPPING_X)

根据我对文档的理解,不应该发生此错误.

标签:python,typing,mypy
来源: https://codeday.me/bug/20190706/1392425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有