我正在使用将字典作为输入的方法来构建类,但是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)
此警告是什么意思,该警告的解决方法是什么?
答案 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所解释的
Incorrect Call Arguments
并取消选中它Type Checker
。另一个不确定的方法,尽管我不确定是否能解决此PyCharm警告,但是在函数中添加装饰器,以使PyCharm知道您的返回类型是dict。本教程为here,但您的文档字符串可能包含以下内容:
"""
:rtype: Dict [str,int]
"""
顺便说一句,您应该在get_keys函数上使用@staticmethod
装饰器,正如Jean所提到的,因为它正在接收一个对象并返回其键(而且我们不希望该对象访问我们的对象。 TestClass数据)。