0

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

1 回答 1

0

以下作品:

print MyClass.canonicalName

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

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

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

print MyClass.name

尽管如此,一个纯粹的 Jython简单方法(如果存在)也将受到赞赏。

于 2011-09-02T07:45:12.503 回答