代码之家  ›  专栏  ›  技术社区  ›  Yar

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

  •  0
  • Yar  · 技术社区  · 3 年前

    说我有一个 Directory 类,该类接受其他子目录列表作为参数:

    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中如何处理这个用例呢?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Yar    3 年前

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

    class File:
       pass
    
    class Directory:
       def __init__(self, directories: List['Directory'], files: List[File]):
          self.directories = directories
          self.files = files
    
        2
  •  1
  •   Frank Yellin    3 年前

    另一种选择是:

    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中,你可以使用普通的old list 而不是 List