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
...しかし、属性「モデル」がないと主張しました
後で
これは、既存の Java クラスでメソッドを呼び出すという事実による制限であり、「JTree の他の多くのメソッドも「スーパー」アプローチを使用して正常に動作する」という結論に達しました。間違っている。super_XXX (例: DefaultTreeModel: super _fireTreeNodesInserted)によって呼び出される保護されたメソッドがいくつかあり、dir( instance ) を使用してインスタンスの属性を調べ始めるまで、初心者の Jython ユーザーにかなりの問題を引き起こします。しかし、原則として、これは一般的な制限のようです。つまり、"super( PresentClass, self )..." を使用して、Jython でサブクラス化された Java クラスの基底クラスを呼び出すことはできません。