'объект' в <__ 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
из этого класса.
Надеюсь, я все прояснил.