1
class  InsertRemoveJTree( JTree ):
    def setModel( self, treeModel ):
    # for reasons I don't understand, the first call below results in infinite recursion... 
    # in other words the "super" approach returns this object, not its underlying base-class 
    # object.  The second approach works as expected
        # super( InsertRemoveJTree, self ).setModel( treeModel )
        JTree.setModel( self, treeModel )  

有人知道这是怎么回事吗?“setModel”是 dir() 列出的 InsertRemoveJTree 对象的一个​​属性。

JTree 中的许多其他方法也可以使用“超级”方法正常工作。

我也尝试过:

super(InsertRemoveJTree, self ).model = treeModel

...但它声称没有attr“模型”

之后

我得出的结论是,这是由于在预先存在的 Java 类上调用方法而造成的限制,并且我的声明“JTree 中的许多其他方法也可以使用“超级”方法正常工作。” 是错的。有一些受保护的方法是通过 super_XXX 调用的(例如 DefaultTreeModel: super _fireTreeNodesInserted),它们会给 Jython 新手用户带来不少问题,直到您开始使用 dir(inserted) 检查实例的属性。但作为一项规则,这似乎是一个普遍的限制:即不能使用“super(PresentClass, self)...”调用 Jython 中子类化的 Java 类的基类。

4

1 回答 1

1

您的第一次调用意味着“调用 InsertRemoveJTree 中定义的 setModel”,即递归调用。您想super( JTree, self ).setModel( treeModel )调用 JTree 中定义的那个。这是super 的 Python 文档

于 2012-05-14T11:35:30.270 回答