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类的基类。
答案 0 :(得分:1)
您的第一个调用意味着“调用InsertRemoveJTree中定义的setModel”,即递归调用。
您希望super( JTree, self ).setModel( treeModel )
调用JTree中定义的那个。
这是Python doc for super。