PyCharm。意外参数可能的被调用者
PyCharm. Unexpected argument(s) Possible callees
我在 PyCharm 中写入并得到一个错误(在行“func(dict_data)”):意外参数可能的被调用者:A.foo(dict_data: 字典) A.bar(dict_data: 字典).
这是 PyCharm 错误还是我做错了什么?
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)
func 实际上是您代码中的一个变量,但您将其作为一个不存在的函数调用,因此 PyCharm 猜测您可能想使用哪个函数来代替 dict_data 作为参数。
1
图片中的 'def function_name(arguments : datatype)' 是函数的识别方式,但您的 ss 具有关键字 'Union',因此 func 的数据类型是 Union。
您可以通过添加 lambda 来消除警告:
self.functions = {
"foo": lambda x: self.foo,
"bar": lambda x: self.bar
}
更好的方法是向 func
添加类型提示,例如
func: Callable[[dict], None] = self.functions[value["type"]]
(别忘了加上from typing import Callable
)
这将通过提供附加信息以正确确定类型来消除 IDE 警告。基本上,它将不再将 func
视为 Union
类型,而是直接知道它是 Callable
已知方法签名。
我在 PyCharm 中写入并得到一个错误(在行“func(dict_data)”):意外参数可能的被调用者:A.foo(dict_data: 字典) A.bar(dict_data: 字典).
这是 PyCharm 错误还是我做错了什么?
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)
func 实际上是您代码中的一个变量,但您将其作为一个不存在的函数调用,因此 PyCharm 猜测您可能想使用哪个函数来代替 dict_data 作为参数。
1
图片中的 'def function_name(arguments : datatype)' 是函数的识别方式,但您的 ss 具有关键字 'Union',因此 func 的数据类型是 Union。
您可以通过添加 lambda 来消除警告:
self.functions = {
"foo": lambda x: self.foo,
"bar": lambda x: self.bar
}
更好的方法是向 func
添加类型提示,例如
func: Callable[[dict], None] = self.functions[value["type"]]
(别忘了加上from typing import Callable
)
这将通过提供附加信息以正确确定类型来消除 IDE 警告。基本上,它将不再将 func
视为 Union
类型,而是直接知道它是 Callable
已知方法签名。