2

インスタンス化されたクラスに自己参照を渡したい (子は親にアクセスできる必要があります)。次のように、すべてが 1 つのファイルにある場合に機能します。

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

これは、2 番目が a を渡すの__main__.ClassAに対し、 a をClassB期待するため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 に答える