How to break a line of chained methods in Python?
--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Meadow
--
Chapters
00:00 How To Break A Line Of Chained Methods In Python?
00:35 Accepted Answer Score 324
00:54 Answer 2 Score 72
01:46 Answer 3 Score 21
02:03 Answer 4 Score 12
02:25 Answer 5 Score 9
02:55 Thank you
--
Full question
https://stackoverflow.com/questions/4768...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #codingstyle #pep8
#avk47
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Lost Meadow
--
Chapters
00:00 How To Break A Line Of Chained Methods In Python?
00:35 Accepted Answer Score 324
00:54 Answer 2 Score 72
01:46 Answer 3 Score 21
02:03 Answer 4 Score 12
02:25 Answer 5 Score 9
02:55 Thank you
--
Full question
https://stackoverflow.com/questions/4768...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #codingstyle #pep8
#avk47
ACCEPTED ANSWER
Score 329
You could use additional parentheses:
subkeyword = (
Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
.filter_by(subkeyword_company_id=self.e_company_id)
.filter_by(subkeyword_word=subkeyword_word)
.filter_by(subkeyword_active=True)
.one()
)
ANSWER 2
Score 72
This is a case where a line continuation character is preferred to open parentheses. The need for this style becomes more obvious as method names get longer and as methods start taking arguments:
subkeyword = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word) \
.filter_by(subkeyword_company_id=self.e_company_id) \
.filter_by(subkeyword_word=subkeyword_word) \
.filter_by(subkeyword_active=True) \
.one()
PEP 8 is intend to be interpreted with a measure of common-sense and an eye for both the practical and the beautiful. Happily violate any PEP 8 guideline that results in ugly or hard to read code.
That being said, if you frequently find yourself at odds with PEP 8, it may be a sign that there are readability issues that transcend your choice of whitespace :-)
ANSWER 3
Score 21
My personal choice would be:
subkeyword = Session.query(
Subkeyword.subkeyword_id,
Subkeyword.subkeyword_word,
).filter_by(
subkeyword_company_id=self.e_company_id,
subkeyword_word=subkeyword_word,
subkeyword_active=True,
).one()
ANSWER 4
Score 12
Just store the intermediate result/object and invoke the next method on it, e.g.
q = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
q = q.filter_by(subkeyword_company_id=self.e_company_id)
q = q.filter_by(subkeyword_word=subkeyword_word)
q = q.filter_by(subkeyword_active=True)
subkeyword = q.one()