我用PyCharm写了一个bug (在“func(Dict_data)”行):意外的参数可能被调用: A.foo(dict_data: dict) A.bar(dict_data: dict)。
是PyCharm的bug,还是我做错了什么?
PyCharm 2020.3
class A:
def __init__(self):
self.functions = {
"foo": self.foo,
"bar": self.bar
}
def typing(self, dict_data: dict):
for key, value in dict_data.items():
if key in self.functions:
func = self.functions[value["type"]]
func(dict_data)
def foo(self, dict_data: dict):
print(dict_data)
def bar(self, dict_data: dict):
print(dict_data)
class B:
def __init__(self):
self.data = {
"foo": {"type": "foo"},
"bar": {"type": "bar"}
}
def get(self) -> dict:
return self.data
if __name__ == "__main__":
b = B()
data = b.get()
a = A()
a.typing(data)
发布于 2020-12-20 01:21:05
dict_data实际上是你代码中的一个变量,但是你将它作为一个不存在的函数来调用,所以PyCharm会猜测你可能想要使用哪个函数来代替它的参数来容纳func。
图片中的'def function_name(arguments : datatype)‘是函数的标识方式,但是你的ss有关键字' Union’,因此func的数据类型是Union。
发布于 2021-02-12 22:33:11
您可以通过添加lambdas来消除警告:
self.functions = {
"foo": lambda x: self.foo,
"bar": lambda x: self.bar
}
发布于 2021-10-09 15:20:27
更好的方法是向func
添加类型提示,如下所示
func: Callable[[dict], None] = self.functions[value["type"]]
(别忘了添加from typing import Callable
)
这将通过为IDE提供额外的信息来正确确定类型,从而消除IDE警告。基本上,它将不再将func
视为Union
类型,而是直接知道它是一个Callable
,一个已知的方法签名。
https://stackoverflow.com/questions/65372118
复制相似问题