猿问

警告:预期类型 [Class Name],改为 'Dict[str, int]'

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


''' 预期类型 'TestClass',得到 'Dict[str, int]' 而不是 less... (⌘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)


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


喵喔喔
浏览 128回答 2
2回答

POPMUISE

诸如您编写的方法称为“实例方法”。self,接收者,应该是一个实例TestClass(否则,许多事情可能会出错,例如super)。您可以定义get_keys为静态方法,或使用简单函数(不将其放入类中)。class TestClass:    @staticmethod    def get_keys(s):        return list(s.keys())您可能需要阅读有关类的 Python 文档以获取更多详细信息。

九州编程

为了具体回答您关于 Pycharm 警告的问题,您当前遇到的警告是由 Pycharm 检查代码中的类型引起的已知问题,因为 PyCharm 很困惑,因为它需要一个 TestClass 对象,但得到一个字典对象。解决此问题的一种方法是禁用该特定警告类型,如从此处解释的那样转到设置/首选项在边栏中,单击检查展开 Python 选项卡向下滚动Incorrect Call Arguments并取消选中它如果这不起作用,您可以取消选中Type Checker。另一个更优雅的方法,虽然我不确定它是否会解决这个 PyCharm 警告,但是在你的函数中添加一个装饰器,让 PyCharm 知道你的返回类型是一个字典。教程在这里,但您的文档字符串可能会包含以下内容:""" :rtype: Dict [str,int] """顺便说一句,您可能应该在 get_keys 函数上使用@staticmethod装饰器,正如 Jean 所提到的,因为它接收一个对象并返回其键(并且我们不希望该对象在此过程中访问我们的 TestClass 数据)。
随时随地看视频慕课网APP

相关分类

Python
我要回答