我有一个类,我动态设置一些属性,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" :(
>忽略#type的问题:ignore:toto.age = 10 #type:ignore#…
>使用setattr设置toto的年龄:setattr(toto,“age”,10)
>显式设置属性(self.age = 0 …)
但是,我在课堂上寻找更优雅,更系统的方式.
有什么建议吗?
最佳答案
我没有足够好地了解mypy以了解这是否(仍然或曾经是)理想的工作,但是this issue和this part of the cheatsheet表明这样的事情:
原文链接:https://www.f2er.com/python/438891.htmlfrom 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 = …调用上检查,所以抬头.