将 class 类型作为参数传递给 class 构造函数

Pass class type as argument to class constructor

假设我有一个 Directory class 接受其他子目录列表作为参数:

class File:
    pass

class Directory:
    def __init__(self, directories: List[Directory], files: List[File]):
                                         ^^^^^^^^^
        self.directories = directories
        self.files = files

我收到一条错误消息 "Directory" is not defined。如果我不传递类型,这段代码工作得很好,但是你如何处理 python 中的这个用例?

您需要的是递归类型定义。这可以在 Python 中通过提供带有类型名称的字符串而不是类型本身来实现。

class File:
   pass

class Directory:
   def __init__(self, directories: List['Directory'], files: List[File]):
      self.directories = directories
      self.files = files

备选方案是:

from __future__ import annotations

class File:
   pass

class Directory:
   def __init__(self, directories: list[Directory], files: list[File]):
      self.directories = directories
      self.files = files

__future__ 导入会导致所有类型转换为它们的等效字符串。在 3.10 中,您可以使用普通的 list 而不是 List