以D.py作为入口,假如A.py,B.py需要相互引用,__init__.py也需要引用D.py
目录如下
一般如果不处理好引用问题都会出现下面的错误
ImportError: cannot import name 'A' from partially initialized module 'c.A' (most likely due to a circular import)
解决方法如下
__init__.py
from .A import A
from .B import B
from D import D as _D
d = _D()
A.py
import time
from .B import B
class A:
def __init__(self, i: int):
self.i = i
def c(self) -> B:
return B(self)
def __getattribute__(self, item):
v = super().__getattribute__(item)
if isinstance(v, int) and time.localtime().tm_hour > 12:
return v + 1
return v
B.py
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .A import A
class B:
def __init__(self, a: "A"):
self.a = a
def c(self):
from .A import A
return A(self.a.i)
D.py
class D:
...
if __name__ == '__main__':
from c import A, B, d
a = A(5)
b: B = a.c()
c = b.c()
print(c.i, d)