当我在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'>
答案 0 :(得分:3)
这是因为Python中的类(或object
可能?)的__repr__()
方法默认只显示module.ClassName
。因此,类Foo
将显示为module.Foo
,无论其如何嵌套在其他类中,因为它仍在module
中。
如果您直接执行脚本,module
将是__main__
,但如果您在另一个模块中导入您的课程,它将显示为my_module.ClassName
- 而不管如何嵌套它是。
__repr__()
(上面链接)的文档说明了此方法返回的字符串:
重要的是表示是信息丰富且明确的
在以下情况中:
>>> class Foo(object):
... class Bar(object):
... class Baz(object):
... pass
...
>>> Foo.Bar.Baz
<class '__main__.Baz'>
<class '__main__.Baz'>
当然不是非常“信息丰富”,也不是明确的,因为名为Baz
的顶级类将具有完全相同的__repr__()
字符串。但是,根据我的经验,Python中的嵌套类非常少见。即使在嵌套类的情况下,任何重要信息都可能来自类的属性或它继承的类,而不是它碰巧占据的命名空间。我当然可以理解你的好奇心。