.describe
- связанный метод. Он связан с вашим фреймом данных, и представление связанного метода включает в себя вывод repr()
того, с чем он связан.
Это можно увидеть в начале вывода:
<bound method NDFrame.describe of ...>
rest - это та же строка, что и repr(data)
.
Обратите внимание, что Python интерактивный интерпретатор всегда повторяет представление того, что было создано последним выражением (если оно не произвело None
). data.describe
создает связанный метод, data.describe()
производит все, что этот метод был предназначен для создания.
Вы можете создать такой же тип вывода для любого связанного метода:
>>> class Foo:
... def __repr__(self):
... return "[This is an instance of the Foo class]"
... def bar(self):
... return "This is what Foo().bar() produces"
...
>>> Foo()
[This is an instance of the Foo class]
>>> Foo().bar
<bound method Foo.bar of [This is an instance of the Foo class]>
>>> Foo().bar()
"This is what Foo().bar() produces"
Обратите внимание, что Foo()
имеет собственный метод __repr__
, который вызывается для создания представления экземпляра.
Вы можете увидеть тот же тип вывода (представление целого датафрейм) для любого метода в фрейме данных, который вы на самом деле не вызываете , например, data.sum
, data.query
, data.pivot
или data.__repr__
.
Связанный метод является частью процесса, посредством которого Python передает в качестве первого аргумента при вызове его, аргумент обычно называется self
. В основном это прокси-объект со ссылками на исходную функцию (data.describe.__func__
) и экземпляр, который передается перед всеми остальными аргументами (data.describe.__self__
). См. дескриптор HOWTO для получения подробной информации о том, как работает связывание.
Если вы хотите express реализацию __repr__
связанного метода как Python кода, это будет:
def __repr__(self):
return f"<bound method {self.__func__.__qualname__} of {self.__self__!r}>"