Python 中的类定义循环引用
Posted songofhawk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 中的类定义循环引用相关的知识,希望对你有一定的参考价值。
Python中通常不做严格的类型定义,但如果是常用且固定的数据结构,还是定义清楚使用起来更方便(起码对象后面打.的时候,IDE可以自动给出方法和属性名提示)。这时,一个复杂的结构,就有可能循环引用,比如:
from typing import List
class A:
x: str
y: B
class B:
w: List[A]
这样的代码,连编译都过不去,会在‘y: B’,这个位置,直接提示:‘Unresolved reference B’。解决方案有两个:
- 保持在同一个文件中定义类
此时可以添加一个特殊的引用:from __future__ import annotations
,告知编译器先“通读”整个文件,再处理typing annotation,就可以避免上述问题。 - 拆分到不同模块中
这种情况下,就得在引用另外一个类的时候,直接引用它的模块,而不是类名:
Module1.py
from . import Module2
class A:
x: str
y: Module2.B
Module2.py
from typing import List
from . import Module1
class B:
w: List[Module1.A]
以上是关于Python 中的类定义循环引用的主要内容,如果未能解决你的问题,请参考以下文章