python中,同文件的类如何循环引用


class A:
    def __init__(self, name: str, hello: B = None) -> None:
        self.name = name
        self.hello = hello


class B:
    def __init__(self, name: str, hello: A = None) -> None:
        self.name = name
        self.hello = hello


if __name__ == "__main__":
    a = A("h1")
    b = B("h2", a)
    c = A("h3", b)

我直接使用是报错的

img

把类名改成str型放到一个list里,遍历list使用exec来调用

问题出在你得A类上,hello参数=B但是这个时候还没有B

```
class A:

def __init__(self, name: str, hello=None) -> None:

    self.name = name

    self.hello = hello

class B:

def __init__(self, name: str, hello=None) -> None:

    self.name = name

    self.hello = hello

if name == "main":

a = A("h1")

b = B("h2", a)

c = A("h3", b)

```,

所有的程序代码,最终还是要变成类似顺序结构的语句运行的,这个逻辑决定了定义总有先后,
所以定义A时,B还没定义,所以就不能使用
猜想你要实现的是两个对象结对子?
可以考虑先搞一个基类 。
类似这样

class A:
    def __init__(self, name: str ) -> None:
        self.name = name
        self.hello = None

class B(A):
    def __init__(self, name: str, hello: A = None) -> None:
        A.__init__(self,name)
        self.hello = hello

if __name__ == "__main__":
    a = A("h1")
    b = B("h2", a)
    c = B("h3", b)

print(b.hello.name, c.hello.name)