【发布时间】: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 钩子。