我想将自引用传递给实例化的类(子应该有权访问父类).如果所有内容都在这样的文件中,它就可以工作:
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
那是因为第二次通过a __main__.ClassA
,而ClassB
期望a ClassA.ClassA
.找到一种不同的方法,例如放入ClassA
自己的模块.