Почему работает `submission.permalink` с PRAW - даже если я не могу найти ничего об этом атрибуте в исходном коде?

Я искал атрибут, который содержит заголовок отправки, который является частью постоянной ссылки на отправку. К сожалению, praw.models.reddit.submission.Submission, похоже, не содержит атрибут permalink, согласно документам PRAW http://praw.readthedocs.io/en/latest/search.html?q=permalink&check_keywords=yes&area=default

Однако, если я убегу

import praw
print(praw.__version__)
reddit = praw.Reddit(...)
for submission in reddit.subreddit("redditdev").hot(limit=5):
    print(type(submission), submission.permalink)

Я получу

4.4.0
<class 'praw.models.reddit.submission.Submission'> /r/redditdev/comments/77gz1m/new_mobile_friendly_reddit_search_is_now_in_beta/
<class 'praw.models.reddit.submission.Submission'> /r/redditdev/comments/77dkl6/can_anyone_explain_why_my_if_x_in_y_isnt_working/
<class 'praw.models.reddit.submission.Submission'> /r/redditdev/comments/77ci3v/ratelimit_you_are_doing_that_too_much/
<class 'praw.models.reddit.submission.Submission'> /r/redditdev/comments/77bak9/is_there_some_standard_way_to_host_bots/
<class 'praw.models.reddit.submission.Submission'> /r/redditdev/comments/77ci1v/praw_checking_if_my_bot_has_already_posted_in_a/

Так что мой вызов permalink работает нормально, даже если grep не может найти permalink в исходных файлах, кроме comment.py ?!

$ grep -r -i -l "permalink" --include "*.py" /usr/local/lib/python3.6/dist-packages/praw/
/usr/local/lib/python3.6/dist-packages/praw/models/reddit/comment.py

То же самое и с последней версией, если вы ищете permalink в источнике на GitHub: https://github.com/praw-dev/praw/search?l=Python&q=permalink&type=&utf8=%E2%9C%93

Что происходит? Откуда появился атрибут?


person finefoot    schedule 19.10.2017    source источник
comment
Все, что у меня есть, - это расплывчатое наследство. :) Но почему именно, не уверен.   -  person selllikesybok    schedule 20.10.2017


Ответы (1)


PRAW динамически предоставляет атрибуты, которые Reddit возвращает через API. Поскольку эти атрибуты могут быть изменены на стороне Reddit, PRAW не прилагает никаких усилий для их документирования, кроме как проинструктировать вас о том, как узнать, что доступно:

https://praw.readthedocs.io/en/latest/getting_started/quick_start.html#determine-available-attributes-of-an-object

При итерации reddit.subreddit("redditdev").hot(limit=5) PRAW отправляет запрос к https://oauth.reddit.com/r/redditdev/hot/.json?limit=5, который по существу возвращает те же данные, что и https://www.reddit.com/r/redditdev/hot/..json?limit=5. При посещении последней ссылки вы должны увидеть, что атрибут постоянной ссылки появляется 5 раз, потому что запрос предназначен для 5 представлений. Вы также увидите все другие атрибуты, доступные для объектов отправки.

person bboe    schedule 23.10.2017
comment
Я всегда открыт для улучшения документации. Не могли бы вы сделать запрос на перенос? - person bboe; 25.10.2017
comment
Ты восхитителен. - person bboe; 05.11.2017