2

我想将自引用传递给实例化类(子级应该可以访问父级)。如果所有内容都在一个文件中,则它可以工作,如下所示:

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

4

2 回答 2

6

那是因为第二个通过 a __main__.ClassA,而ClassB期望 a ClassA.ClassA。找到一种不同的方式来做这件事,比如放入ClassA它自己的模块。

于 2012-04-10T08:29:10.743 回答
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')

这对我有用,但我不知道它是否是你要找的。

于 2012-04-10T08:48:09.323 回答