Jython 中的完全限定类名

Posted

技术标签:

【中文标题】Jython 中的完全限定类名【英文标题】:Fully qualified class name in Jython 【发布时间】:2011-11-08 08:38:40 【问题描述】:

假设 some.module.MyClass 是一个 Java 类,如果在 Jython 2.1 中导入,它的全限定类名可以这样得到:

from some.module import MyClass
print MyClass.__name__

然后打印“some.module.MyClass”。

现在,Jython 2.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

【问题讨论】:

Get fully qualified class name of an object in python的可能重复 @katrielalex 不是重复的——可能有一种始终有效的 JVM-y 方式,因为 MyClass.name 在某些时候有效,他们接受了该问题的答案,在这个太罗嗦了。 @agf:够公平;理想情况下,OP 可以进行编辑以明确表示他们正在寻找特定于 JVM 的方法并且他们知道上一个问题。 是的,我知道之前的帖子。在这种情况下,我有一个类对象,而不是类的实例。我不介意获取完整类名的方法是 JVM 特定方法还是 Jython 钩子。 【参考方案1】:

以下作品:

print MyClass.canonicalName

它会按预期打印“some.module.MyClass”。

在这种情况下,调用 java.lang.Class.getCanonicalName。

与 getName() 相比,任意类具有称为 getCanonicalName() 的方法的可能性较小,因此原则上它比 getName() 更可靠

print MyClass.name

不过,纯粹的 Jython 简单 方式(如果存在)也会受到赞赏。

【讨论】:

以上是关于Jython 中的完全限定类名的主要内容,如果未能解决你的问题,请参考以下文章

jython 2.7.0 中的 SSLHandshakeException [重复]

jython 中的 SSL 非法状态异常

运行在java虚拟机上的Python

如何使用 Jython/PyDev 修复 Eclipse Kepler/Luna 中的 UnsupportedCharsetException?

python Jython天真的方法,用于根据名字列表检测OpenRefine中的潜在人名

Pig 中 UDF 中 Jython 的限制