Python 为什么打印内部类会像打印';s是一个模块';什么是变量?

Python 为什么打印内部类会像打印';s是一个模块';什么是变量?,python,python-2.7,Python,Python 2.7,当我用Python打印内部类时,为什么它会被打印成模块变量(\uuuuu main\uuuu.FInner),而不是被打印成\uuuuuu main\uuuu.F.FInner或嵌套的东西 class F(object): class FInner: x = 1 x = F() print x.FInner # __main__.FInner 或者,即使我使用较新的样式内部类样式,输出仍然相似 class F(object): class FInner

当我用Python打印内部类时,为什么它会被打印成模块变量(
\uuuuu main\uuuu.FInner
),而不是被打印成
\uuuuuu main\uuuu.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'>
F类(对象):
类FInner(对象):
x=1
x=F()
打印x.FInner#
这是因为Python中类的方法(或对象的方法)默认情况下只显示
模块.ClassName
。因此,类
Foo
将显示为
module.Foo
,而不管它在其他类中的嵌套程度如何,因为它仍然在
module

如果直接执行脚本,
模块
将是
\uuuuu main\uuuuu
,但如果在另一个模块中导入类,它将显示为
my\u module.ClassName
,无论嵌套程度如何

\uuuu repr\uuuu()
(链接在上面)的文档说明了此方法返回的字符串:

重要的是,表示信息丰富且明确

在如下情况下:

>>> class Foo(object):
...     class Bar(object):
...             class Baz(object):
...                     pass
... 
>>> Foo.Bar.Baz
<class '__main__.Baz'>
>>类Foo(对象):
...     类栏(对象):
...             类别Baz(对象):
...                     通过
... 
>>>Foo.Bar.Baz

当然不是很“信息丰富”,也不是很明确,因为名为
Baz
的顶级类将具有完全相同的
\uuuuuu repr\uuu()
字符串。然而,至少在我的经验中,Python中的嵌套类是非常罕见的。即使在嵌套类的情况下,任何重要信息都可能来自该类的属性或它从中继承的类,而不是它碰巧占用的名称空间。我当然能理解你的好奇心

为什么要嵌套类?为什么内部类是一个老式类?我正在使用。它建议在旧样式中添加一个名为Meta的内部类