将 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
假设我有一个 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