我想将自引用传递给实例化的类(子应该有权访问父级)。如果所有内容都在这样的文件中,它就可以工作:
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
答案 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')
这对我有用,但我不知道这是不是你想要的。