将自引用传递给实例化的类

HWe*_*nde 2 python class

我想将自引用传递给实例化的类(子应该有权访问父类).如果所有内容都在这样的文件中,它就可以工作:

class ClassB:
  def __init__(self, name, parent):
    assert isinstance(parent, ClassA)
    self.name = name
    self.parent = parent
    print('my parent is', parent.name)

class ClassA:
  def __init__(self, name):
    self.name = name
    self.b = ClassB('child', self)

a = ClassA('parent')
Run Code Online (Sandbox Code Playgroud)

输出是my parent is parent预期的

2文件版本是这样的:

class ClassB:
  def __init__(self, name, parent):
    from ClassA import ClassA
    assert isinstance(parent, ClassA)
    self.name = name
    self.parent = parent
    print('my parent is', parent.name)
Run Code Online (Sandbox Code Playgroud)

和:

from ClassB import ClassB

class ClassA:
  def __init__(self, name):
    self.name = name
    self.b = ClassB('myName', self)

if __name__ == '__main__':
  a = ClassA('parent')
Run Code Online (Sandbox Code Playgroud)

输出是 assert isinstance(parent, ClassA) AssertionError

Ign*_*ams 6

那是因为第二次通过a __main__.ClassA,而ClassB期望a ClassA.ClassA.找到一种不同的方法,例如放入ClassA自己的模块.

  • `if`绝对与它无关. (2认同)
  • 不同之处在于您运行的脚本成为`__main__`模块.这就是它的名字是"__main __"`的原因. (2认同)