繁体   English   中英

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

[英]Passing a self-reference down to an instantiated class

我想将自我引用传递给实例化的 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')

output 是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')

output 是assert isinstance(parent, ClassA) AssertionError

那是因为第二个传递了__main__.ClassA ,而ClassB需要一个ClassA.ClassA 找到一种不同的方法来完成此操作,例如将ClassA放入其自己的模块中。

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')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM