首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyCharm。意外参数可能的被调用者

PyCharm。意外参数可能的被调用者
EN

Stack Overflow用户
提问于 2020-12-20 00:45:32
回答 3查看 1.2K关注 0票数 0

我用PyCharm写了一个bug (在“func(Dict_data)”行):意外的参数可能被调用: A.foo(dict_data: dict) A.bar(dict_data: dict)。

是PyCharm的bug,还是我做错了什么?

PyCharm 2020.3

代码语言:javascript
运行
复制
    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)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-20 01:21:05

dict_data实际上是你代码中的一个变量,但是你将它作为一个不存在的函数来调用,所以PyCharm会猜测你可能想要使用哪个函数来代替它的参数来容纳func。

1

图片中的'def function_name(arguments : datatype)‘是函数的标识方式,但是你的ss有关键字' Union’,因此func的数据类型是Union。

票数 1
EN

Stack Overflow用户

发布于 2021-02-12 22:33:11

您可以通过添加lambdas来消除警告:

代码语言:javascript
运行
复制
self.functions = {
                "foo": lambda x: self.foo,
                "bar": lambda x: self.bar
            }
票数 0
EN

Stack Overflow用户

发布于 2021-10-09 15:20:27

更好的方法是向func添加类型提示,如下所示

代码语言:javascript
运行
复制
func: Callable[[dict], None] = self.functions[value["type"]]

(别忘了添加from typing import Callable)

这将通过为IDE提供额外的信息来正确确定类型,从而消除IDE警告。基本上,它将不再将func视为Union类型,而是直接知道它是一个Callable,一个已知的方法签名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65372118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档