加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

从mypy中删除Python类中动态设置的属性的错误

发布时间:2020-12-16 22:26:55 所属栏目:Python 来源:网络整理
导读:我正在使用mypy检查我的Python代码. 我有一个类,我动态设置一些属性,mypy继续抱怨它: error:"Toto" has no attribute "age" 这是我的代码: class Toto: def __init__(self,name:str) - None: self.name = name for attr in ['age','height']: setattr(self

我正在使用mypy检查我的Python代码.

我有一个类,我动态设置一些属性,mypy继续抱怨它:

error:"Toto" has no attribute "age"

这是我的代码:

class Toto:
    def __init__(self,name:str) -> None:
        self.name = name
        for attr in ['age','height']:
            setattr(self,attr,0)


toto = Toto("Toto")
toto.age = 10  # "Toto" has no attribute "age" :(

显然,可以有3种方法来解决这个问题

>忽略#type的问题:ignore:toto.age = 10 #type:ignore#…
>使用setattr设置toto的年龄:setattr(toto,“age”,10)
>显式设置属性(self.age = 0 …)

但是,我在课堂上寻找更优雅,更系统的方式.

有什么建议吗?

最佳答案
我没有足够好地了解mypy以了解这是否(仍然或曾经是)理想的工作,但是this issue和this part of the cheatsheet表明这样的事情:

from typing import Any

class Toto:
    def __init__(self,0)

    def __setattr__(self,name:str,value:Any):
        super().__setattr__(name,value)

toto = Toto("Toto")
toto.age = 10

如果没有mypy抱怨,你可以做你正在做的事情(它确实如此,只是经过测试).

任何可能更严格,但类型将在setattr()和“传统”obj.attr = …调用上检查,所以抬头.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读