假设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
答案 0 :(得分:0)
以下作品:
print MyClass.canonicalName
它将按预期打印“some.module.MyClass”。
在这种情况下,调用java.lang.Class.getCanonicalName。
任意类不太可能有一个名为getCanonicalName()的方法而不是getName(),所以原则上它比
更可靠print MyClass.name
然而,一个纯粹的Jython 简单方式(如果存在的话)也会受到赞赏。