Python中文
首页
教程
问答
标签
搜索
登录
注册
如何在自定义dict子类中键入.values()的返回类型?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>当我用<code>mypy</code>检查下面的类时,它会抛出一个错误</p> <blockquote> <p>error: Returning Any from function declared to return "Optional[SomeDictValueType]"</p> </blockquote> <p>在<code>get_by_id</code>中,<code>.values()</code>的类型没有正确定义/限制</p> <pre><code>class SomeDict(dict): def __init__(self) -> None: self._some_attribute: SomeRandomType = None def get_by_id(self, id: str) -> Optional[SomeDictValueType]: for p in self.values(): if p._id == id: return p return None </code></pre> <br/> 我在网上发现了类似的问题,并尝试了以下方法: <ol> <li><p>如<a href="https://stackoverflow.com/questions/36811192/python-type-hints-specify-key-value-type-for-dict-subclass">here</a>所述,向<code>__setitem__</code>添加类型提示</p> <pre><code> def __setitem__(self, key: str, value: SomeDictValueType) -> None: super(SomeDict, self).__setitem__(key, value) </code></pre> </li> <li><p>在类头中使用<code>Mapping</code>,如<a href="https://stackoverflow.com/questions/59427687/how-to-add-type-annotations-to-custom-dict-subclass-in-python?noredirect=1&lq=1">here</a>所述</p> <pre><code> class SomeDict(dict, Mapping[str, SomeDictValueType]): ... </code></pre> </li> </ol> <p>我如何在不使用<code># type: ignore</code>的情况下消除此错误?此类的实例将永远不会包含除<code>SomeDictValueType</code>以外的类型的值</p> <hr/> <p><strong>编辑:</strong><br/> 下面是一个简单的例子来重现错误。将以下代码段保存到python文件中,并在其上执行<code>mypy --strict <filename>.py</code></p> <pre><code>from typing import Optional class SomeDict(dict): # type: ignore def __init__(self) -> None: self._some_attribute: Optional[str] = None def get_by_id(self, id: str) -> Optional[int]: for p in self.values(): if p._id == id: return p return None </code></pre> <p>应引发以下错误:</p> <blockquote> <p>test.py:10: error: Returning Any from function declared to return "Optional[int]"</p> </blockquote>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>mypy是正确的。因为您遍历了^ {< CD1> },所以无法判断DICT值的类型,它认为它是^ {CD2}}。<p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
当用户用PYTHON设置一个或一个不带值的URL时,他们怎么能输入一个/a的代码呢?
3 回答
当用户登录到站点时,如何显示不同的导航栏
5 回答
当用户登录时,在Flask中向用户显示处理结果
2 回答
当用户的Flask会话结束时,我如何从Redis后端中移除所有Celery结果?
6 回答
当用户的Okta配置文件字段当前为blan时,更新该字段
8 回答
当用户的付款逾期2天时,从Django模型检索数据
8 回答
当用户的消息以问号结尾时,如何让机器人说些什么?
9 回答
当用户的系统上可能也安装了Python 2.7时,如何在用户的系统上运行Python 3脚本?
3 回答
当用户确定打印数量时,使用Matplotlib打印动画
8 回答
当用户离开时是否可以删除整个网页?
7 回答
当用户给出一个单词时如何打印?
7 回答
当用户继续更改TKin中的值(使用trace方法)时,使用Entry并更新输入的条目
2 回答
当用户编辑表单字段时,从Django时间字段中删除秒数
7 回答
当用户被更改时,消息不会来自web套接字
8 回答
当用户访问表单时,如何使表单为只读,而不具有更改权限
7 回答
当用户试图更改对象的值时,使用描述符类引发RuntimeError
8 回答
当用户调整GUI的大小时,是否有方法更改GUI内容的大小?
5 回答
当用户调整风的大小时,pythontkinter小部件的大小会不均匀
4 回答
当用户购买某个类别时,是否查找其他类别的销售?
7 回答
当用户转到上一页时,Django和芹菜插入操作
5 回答