【问题标题】:Why does printing inner class prints as if it's a module's variable?为什么打印内部类打印就好像它是模块的变量?
【发布时间】:2016-12-13 23:06:55
【问题描述】:

当我在 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'>

【问题讨论】:

标签: python python-2.7


【解决方案1】:

这是因为 Python 中类的 __repr__() 方法(或者可能是 object?)默认只显示 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'>

&lt;class '__main__.Baz'&gt; 肯定不是非常“信息丰富”,也不是很明确,因为名为@9​​87654334@ 的顶级类将具有完全相同的__repr__() 字符串。但是,至少在我的经验中,Python 中的嵌套类非常少见。即使在嵌套类的情况下,任何重要信息也很可能来自类的属性,或者它所继承的类,而不是它恰好占据的命名空间。不过,我当然能理解你的好奇心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 2011-11-25
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2017-06-15
    • 2019-07-13
    • 1970-01-01
    相关资源
    最近更新 更多