【问题标题】:Warning: Expected type [Class Name], got 'Dict[str, int]' instead警告:预期类型 [Class Name],改为 'Dict[str, int]'
【发布时间】:2020-02-09 23:48:35
【问题描述】:

我正在使用将字典作为输入的方法构建一个类,但 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)

这个警告是什么意思?修复它的方法是什么?

【问题讨论】:

  • 您的代码没有多大意义。 get_keys 是一个实例方法,你应该在类的实例上调用它。但是您的代码中没有任何地方可以接受字典,所以我很清楚密钥应该来自哪里。
  • get_key() 是一个方法 - 它通常会在TestClass实例 上调用,而不是Testclass 本身。除了传递给所有方法的隐式 self 之外,它不会接受任何参数,所以我不知道你传递的那个 dict 应该做什么。

标签: python pycharm


【解决方案1】:

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

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

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

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

您可能需要阅读Python documentation about classes 了解更多详情。

【讨论】:

    【解决方案2】:

    为了具体回答您关于 Pycharm 警告的问题,您当前遇到的警告是由 Pycharm 检查代码中的类型引起的 known problem,因为 PyCharm 很困惑,因为它需要一个 TestClass 对象但得到一个字典而是对象。

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

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

    另一个更优雅的方法,虽然我不确定它是否会解决这个 PyCharm 警告,但它是在你的函数中添加一个装饰器,让 PyC​​harm 知道你的返回类型是一个字典。教程是here,但您的文档字符串可能会包含以下内容:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 2017-11-12
      • 1970-01-01
      • 2021-11-07
      • 2016-01-27
      • 2020-08-29
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多