0

some.module.MyClassがJavaクラスであるとすると、Jython 2.1にインポートされた場合、その完全修飾クラス名は次のように取得できます。

from some.module import MyClass
print MyClass.__name__

次に、「some.module.MyClass」が出力されました。

現在、Jython2.5の同じコードは「MyClass」のみを出力します。

Jython 2.5で完全な名前を取得するために、次のことを見つけました。

print MyClass.name

「some.module.MyClass」を出力します(java.lang.Class.getName()が呼び出されると思います)。

問題は、MyClassにgetNameメソッドがあるかどうかです。その後、上記は失敗します。

私が見つけた解決策は、

print MyClass.__module__ + "." + MyClass.__name__

しかし、それはもっと言葉遣いです。

誰かがもっと簡単な方法(元の__name__のような)を知っているなら、それは歓迎されるでしょう。

注:私はすでに完全なクラス名を知っています(実際、私はそれをインポートしました)。クラスの名前が変更されたり移動されたりした場合に、この方法で変更を検出したいと思います。例えば:

className = "some.module.MyClass"   # needs to be changed manually if MyClass is moved

とは対照的に

className = MyClass.name   # no need to be changed if MyClass is moved
4

1 に答える 1

0

以下の作品:

print MyClass.canonicalName

期待どおりに「some.module.MyClass」が出力されます。

この場合、java.lang.Class.getCanonicalName が呼び出されます。

任意のクラスが getCanonicalName() と呼ばれるメソッドを持っている可能性は getName() よりも低いため、原則として、より信頼性が高くなります。

print MyClass.name

それにもかかわらず、純粋な Jython の単純な方法 (存在する場合) も高く評価されます。

于 2011-09-02T07:45:12.503 に答える