【问题标题】:'object' in <__main__.Foo object at 0x10f43b7b8> [closed]'object' in <__main__.Foo object at 0x10f43b7b8> [关闭]
【发布时间】:2018-04-22 03:17:02
【问题描述】:

假设一个类:

class Foo(object): pass

创建一个实例:

foo = Foo()

在交互模式下测试它们:

In [80]: print(Foo)
<class '__main__.Foo'>

很好的提示,first_class 模块__main__ 中的“Foo”类,但是:

In [81]: print(foo)
<__main__.Foo object at 0x10f43b0b8>

'object'这个词让我很困惑,为什么python在这里使用object而不是instance

【问题讨论】:

  • foo 是一个对象。就这样。该地址意味着它位于某个地方。 Foo 是一个类。你必须习惯它,或者提交 PEP。
  • foo 不继承自 FoofooFoo 的实例,Foo 继承自 object,因此 foo 是(也)@987654337 @.
  • 有道理,复杂的逻辑。
  • 一切都是对象,&lt;__main__.Foo object at 0x10f43b0b8&gt; 没有任何暗示。
  • 类也是实例,因此您不会从重命名中获得太多清晰性。

标签: python repr python-object


【解决方案1】:

这是new-style and old-style class的区别:

class Old():
    pass

class New(object):
    pass

print `Old()`
print `New()`

使用 python2.7,产生:

<__main__.Old instance at 0x10bc23dd0>
<__main__.New object at 0x10bc27590>

最初,repr() 在旧样式类和新样式类的“实例”上产生 &lt;X instance at ...&gt;,请参阅此 commit,但后来是新样式类实例 repr() changed to the current form

【讨论】:

    【解决方案2】:

    类是数据和方法的集合。

    一个对象是一个类的一个实例。

    假设您有两个文件:foo.pybar.py

    Foo.py:

    class Foo:
        pass
    

    Bar.py:

    import Foo
    
    class Bar:
        pass
    
    
    foo = Foo.Foo()
    bar = Bar()
    
    print(foo)
    # Note the parenthesis. By doing this you are making an instance.
    print(Foo.Foo())
    # both print something like <Foo.Foo object at 0x000000000229A128>
    
    
    print(Foo.Foo)
    # prints <class 'Foo.Foo'>
    
    print(bar)
    # prints <__main__.Bar object at 0x000000000229A5F8>
    

    当您打印fooFoo.Foo()(带括号)时,它告诉您您引用的类的实例来自模块Foo,它引用的类是Foo。再一次,object 部分只是意味着它是来自所述模块的所述类的实例。

    如果您打印Foo.Foo(不带括号),您将得到:

    <class 'Foo.Foo'>
    

    它告诉您该类驻留在模块Foo 中并命名为Foo

    打印barBar()(带括号)也是如此: __main__ 仅表示您引用的类来自您当前正在执行的脚本。 Bar 是你引用的类。

    但是,如果你打印Bar(没有括号),你会得到:

    <class '__main__.Bar'>
    

    这告诉我们 Bar 类驻留在主脚本中。

    TL;DR:

    Bar 引用类 Bar() 将在该类之外创建一个 objectinstance

    希望我把事情弄清楚了。

    【讨论】:

    • 我是这么认为的。您是否只是想让打印对象打印出&lt;__main__.Bar instance&gt; 而不是&lt;__main__.Bar object at xxxxxxx&gt;
    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多