IronPython中的继承和循环引用

问题描述:

我有一个关于IronPython中的循环引用的问题。假设我有类层次结构。在一个文件中我有父类:IronPython中的继承和循环引用

from Child import Child 

class Parent(object): 
    def getChild(self): 
     return Child() 

在另一个文件中我有子类:

from Parent import Parent 

class Child(Parent): 
    def doSomething(self): 
     return 0 

我有一种循环引用在这里。所以,当我尝试这样执行代码:

from Parent import * 

parent = Parent() 
child = parent.getChild() 

我得到了一个错误: 能否避免某种方式循环引用?

+0

实际上你是否需要将这些类放在不同的文件中? –

+0

是的,我无法修改文件结构。其实我真正的例子有点复杂,我在一个非常简单的例子中用两个类在单独的文件中重现了这个错误。我正在寻找这种问题的任何解决方案,但我还没有结果。任何帮助,将不胜感激。 – Bill

正如你所说,你有一个循环导入问题。

解决这个问题的正常方法是简单地将两个类放在同一个文件中。 Python不会强制在文件和类之间建立任何链接,因此您可以在单个文件中拥有尽可能多的类,并且可以随意调用它们。 (事实上​​,给文件完全相同的名称,因为它包含的类是 -Pythonic;二话不说,文件应该有lower_case_with_underscore名称,而类是驼峰)

但是,如果由于某种原因你不能这样做,你可以通过在方法内部打破循环导入:

class Parent(object): 
    def getChild(self): 
     from child import Child 
     return Child()