当方法参数属于同一类时,未定义类名称

时间:2019-07-14 03:14:10

标签: python-3.x visual-studio-code pylint typehints

class Folder:

    def copy_files_with(self, extension: str, to_location: Folder):
        pass

    def __eq__(self, other):
        if isinstance(other, Folder):
            return (self._parent, self._subdirectory) == (other._parent, other._subdirectory)
        return NotImplemented

    def __hash__(self):
        return hash((self._parent, self._subdirectory))

我正在将Visual Studio代码与PyLint一起使用,并且通过copy_files_with方法返回错误。

line 20, in Folder
def copy_files_with(self, extension: str, to_location: Folder)

我删除了所有不必要的代码,但是第20行是方法copy_files_with所在的位置。

我不明白为什么,__eq__方法可以在Folder调用中看到isinstance类。我希望to_location成为Folder,并且想在类型提示中指定该怎么做?

1 个答案:

答案 0 :(得分:1)

在处理一个类及其方法时,在导入模块的那一刻,将运行包含“ class”和“ def”语句的行。方法主体-“ def”块中的代码,仅在稍后实例化该类并调用其方法时才运行。

因此,很自然地,没有在其自身的内部内部定义一个类-必须在Python创建类本身之前处理该类的主体-才将其与其类关联名称。

实现此目的的方法-在同一文件中转发对自己类的引用以及对类的引用,在注释中将其名称用作字符串-在这种情况下,您应使用

 def copy_files_with(self, extension: str, to_location: 'Folder'):

,它应该可以与大多数使用注释的工具一起使用。