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/PyDev 修复 Eclipse Kepler/Luna 中的 UnsupportedCharsetException?