Jython中的完全限定类名

时间:2011-09-01 12:07:03

标签: python jython classname

假设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

1 个答案:

答案 0 :(得分:0)

以下作品:

print MyClass.canonicalName

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

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

任意类不太可能有一个名为getCanonicalName()的方法而不是getName(),所以原则上它比

更可靠
print MyClass.name

然而,一个纯粹的Jython 简单方式(如果存在的话)也会受到赞赏。