警告:预期的类型为[Class Name],取而代之的是'Dict [str,int]'

时间:2019-10-12 20:49:38

标签: python pycharm

我正在使用将字典作为输入的方法来构建类,但是Pycharm显示警告。

''' 预期的类型为“ TestClass”,取而代之的是“ Dict [str,int]” ...(⌘F1) 检查信息:此检查检测函数调用表达式中的类型错误。由于动态调度和鸭子输入,这在有限但有用的情况下是可能的。可以在文档字符串或Python 3函数注释中指定函数参数的类型 '''

class TestClass:
    def __getitem__(self, index):
        return self[index]

    def get_keys(self):
        return list(self.keys())


dict_input = {'a':123, 'b':456}
TestClass.get_keys(dict_input)

所以我在这里得到警告:

TestClass.get_keys(dict_input)

此警告是什么意思,该警告的解决方法是什么?

2 个答案:

答案 0 :(得分:2)

您编写的方法之类的方法称为“实例方法”。

self(接收者)应该是TestClass的实例(否则,很多事情可能会出错,例如super)。

您可以将get_keys定义为静态方法,也可以使用简单的函数(无需将其放在类中)。

class TestClass:
    @staticmethod
    def get_keys(s):
        return list(s.keys())

您可能需要阅读Python documentation about classes以获得更多详细信息。

答案 1 :(得分:-1)

要专门回答有关Pycharm警告的问题,您当前遇到的警告是由Pycharm检查代码中的类型引起的known problem,因为PyCharm感到困惑,因为它期望使用TestClass对象,但会而是一个字典对象。

一种解决此问题的方法是禁用特定的警告类型,如here所解释的

  1. 转到“设置/首选项”
  2. 在边栏中,单击“检查”
  3. 展开“ Python”标签
  4. 向下滚动到Incorrect Call Arguments并取消选中它
  5. 如果这样不起作用,则可以取消选中Type Checker

另一个不确定的方法,尽管我不确定是否能解决此PyCharm警告,但是在函数中添加装饰器,以使PyCharm知道您的返回类型是dict。本教程为here,但您的文档字符串可能包含以下内容:

"""
:rtype: Dict [str,int]
"""

顺便说一句,您应该在get_keys函数上使用@staticmethod装饰器,正如Jean所提到的,因为它正在接收一个对象并返回其键(而且我们不希望该对象访问我们的对象。 TestClass数据)。