Python 循环输入海关 类,
Python typing in a loop of customs classes,
从 Python 3.5 开始,可以使用键入提示。我现在面临无法找到正确使用方法的情况。
我有 2 个文件(FileA.py、FileB.py),其中 class AA 使用 class BB,class BB 使用 classAA.
以下代码运行正常:
FileA.py
from FileB import BB
class AA:
def __init__(self):
self.link_to_b = None
def add_b(self, b: BB):
self.link_to_b = b
FileB.py
class BB:
def __init__(self):
self.property_b = 42
self.link_to_a = None
def add_a(self, a):
self.link_to_a = a
来自 class AA 的方法 add_b(self, b: BB) 正在使用键入提示,指定 b 应该是 BB 的一个实例。
我想对 class BB 中的方法 add_a(self, a) 做同样的事情。问题是,当我尝试从另一个文件导入 class 时(与我在 FileA.py 中所做的相同),我收到一条错误消息。
ImportError: cannot import name 'BB' from 'FileB'
如果我不导入它,而是尝试使用如下所示的键入提示,我会收到一条 NameError 消息。
def add_a(self, a: AA):
NameError: name 'AA' is not defined
使用打字提示的正确方法应该是什么?
有几个选项可以在尚未定义的对象上使用类型提示:
- 使用 forward-reference 类型字符串:
def add_a(self, a: 'AA')
- 使用Postponed Evaluation of Annotations
from __future__ import annotations
从 Python 3.5 开始,可以使用键入提示。我现在面临无法找到正确使用方法的情况。
我有 2 个文件(FileA.py、FileB.py),其中 class AA 使用 class BB,class BB 使用 classAA.
以下代码运行正常:
FileA.py
from FileB import BB
class AA:
def __init__(self):
self.link_to_b = None
def add_b(self, b: BB):
self.link_to_b = b
FileB.py
class BB:
def __init__(self):
self.property_b = 42
self.link_to_a = None
def add_a(self, a):
self.link_to_a = a
来自 class AA 的方法 add_b(self, b: BB) 正在使用键入提示,指定 b 应该是 BB 的一个实例。
我想对 class BB 中的方法 add_a(self, a) 做同样的事情。问题是,当我尝试从另一个文件导入 class 时(与我在 FileA.py 中所做的相同),我收到一条错误消息。
ImportError: cannot import name 'BB' from 'FileB'
如果我不导入它,而是尝试使用如下所示的键入提示,我会收到一条 NameError 消息。
def add_a(self, a: AA):
NameError: name 'AA' is not defined
使用打字提示的正确方法应该是什么?
有几个选项可以在尚未定义的对象上使用类型提示:
- 使用 forward-reference 类型字符串:
def add_a(self, a: 'AA')
- 使用Postponed Evaluation of Annotations
from __future__ import annotations