【问题标题】:Fully qualified class name in JythonJython 中的完全限定类名
【发布时间】: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

【问题讨论】:

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

标签: python jython classname


【解决方案1】:

以下作品:

print MyClass.canonicalName

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

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

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

print MyClass.name

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

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2015-08-03
    • 2020-07-14
    • 2019-12-14
    • 2011-07-16
    相关资源
    最近更新 更多