jython无法访问超类

时间:2012-05-13 16:47:59

标签: jython superclass

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检查实例的属性(例))。但通常这似乎是一个普遍的限制:即你不能使用“super(PresentClass,self)......”来调用Jython中子类的Java类的基类。

1 个答案:

答案 0 :(得分:1)

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