当我在 Python 中打印内部类时,为什么它被打印为模块变量 (__main__.FInner
) 而不是打印为 __main__.F.FInner
还是嵌套的东西?
class F(object):
class FInner:
x = 1
x = F()
print x.FInner # __main__.FInner
或者即使我使用较新的内部类样式,输出仍然相似
class F(object):
class FInner(object):
x = 1
x = F()
print x.FInner # <class '__main__.FInner'>
最佳答案
这是因为 __repr__()
Python 类的方法(或者可能是 object
?)只显示 module.ClassName
默认情况下。因此,类 Foo
将显示为 module.Foo
不管它在其他类中的嵌套程度如何,因为它仍在 module
中.
如果直接执行脚本,module
将是 __main__
, 但如果你在另一个模块中导入你的类,它将显示为 my_module.ClassName
相反 - 同样,不管它是如何嵌套的。
__repr__()
的文档(上面的链接)谈到了此方法返回的字符串:
it is important that the representation is information-rich and unambiguous
在类似下面的情况下:
>>> class Foo(object):
... class Bar(object):
... class Baz(object):
... pass
...
>>> Foo.Bar.Baz
<class '__main__.Baz'>
<class '__main__.Baz'>
当然不是很“信息丰富”,也不是明确的,因为一个名为 Baz
的顶级类会有完全相同的 __repr__()
字符串。但是,至少以我的经验来看,Python 中的嵌套类非常少见。即使在嵌套类的情况下,任何重要信息也可能来自类的属性或它继承自的类,而不是它恰好占据的 namespace 。我当然可以理解你的好奇心。
关于python - 为什么打印内部类打印出来就好像它是一个模块的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132113/