'объект' в <__ main__.Foo объекте в 0x10f43b7b8>

Предположим, класс:

class Foo(object): pass

Сделайте экземпляр:

foo = Foo()

Протестируйте их в интерактивном режиме:

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

Хороший совет, класс 'Foo' в модуле first_class __main__, Тем не мение:

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

Слово "объект" смущает меня, почему Python использует object здесь вместо instance?

2 ответа

Это разница между классами new-style и old-style:

class Old():
    pass

class New(object):
    pass

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

с python2.7, дает:

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

Первоначально, repr() на "экземпляре" старого и нового стиля <X instance at ...>смотрите этот коммит, но позже новый экземпляр класса стиля repr() изменился на текущую форму.

Класс - это набор данных и методов.

Объект является экземпляром класса.

Предположим, у вас есть два файла: foo.py а также bar.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>

Когда вы печатаете либо foo или же Foo.Foo() (с круглыми скобками) он говорит вам, что экземпляр класса, на который вы ссылаетесь, происходит из модуля Foo и класс, на который он ссылается, Foo, Еще раз, object part просто означает, что это экземпляр указанного класса, поступающий из указанного модуля.

Если вы печатаете Foo.Foo (без скобок) вы просто получите:

<class 'Foo.Foo'>

который говорит вам, что класс находится в модуле Foo и назван Foo

То же самое касается печати bar или же Bar() (с круглыми скобками):__main__ просто означает, что класс, на который вы ссылаетесь, происходит из сценария, который вы выполняете в данный момент.Bar это класс, на который вы ссылаетесь.

Тем не менее, если вы печатаете Bar (Без скобок), вы получите:

<class '__main__.Bar'>

который говорит нам, что класс Bar находится в основном скрипте.

TL; DR:

Bar ссылается на класс Bar() создаст object или же instance из этого класса.

Надеюсь, я все прояснил.

Другие вопросы по тегам