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

时间:2012-04-10 08:26:02

标签: 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')

按预期输出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)

from ClassB import ClassB

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

if __name__ == '__main__':
  a = ClassA('parent')

输出为assert isinstance(parent, ClassA) AssertionError

2 个答案:

答案 0 :(得分:6)

那是因为第二个传递__main__.ClassA,而ClassB需要ClassA.ClassA。找到一种不同的方法,例如将ClassA放在自己的模块中。

答案 1 :(得分:1)

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

from ClassB import ClassB

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

if __name__ == '__main__':
  a = ClassA('parent')

这对我有用,但我不知道这是不是你想要的。