[python] 파이썬에서 일련의 체인 메소드를 끊는 방법?

다음 코드 줄이 있습니다 (이름 지정 규칙을 비난하지 말고 내 것이 아닙니다).

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()

나는 (너무 읽기 쉽지 않은) 모양을 좋아하지 않지만이 상황에서 줄을 79 자로 제한하는 더 좋은 아이디어는 없습니다. 더 나은 방법은 있습니까 (바람직하게는 백 슬래시가 없는가)?



답변

추가 괄호를 사용할 수 있습니다.

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()
    )


답변

괄호를 여는 데 줄 연속 문자가 선호되는 경우입니다. 메소드 이름이 길어지고 메소드가 인수를 시작함에 따라이 스타일의 필요성이 더욱 분명해집니다.

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은 실용적이고 아름다운 것에 대한 상식과 눈으로 해석됩니다. 코드가보기 흉하거나 읽기 어려운 PEP 8 가이드 라인을 기꺼이 위반합니다.

즉, PEP 8과 자주 충돌하는 경우 공백 선택을 초월하는 가독성 문제가 있음을 나타낼 수 있습니다. 🙂


답변

내 개인적인 선택은 다음과 같습니다.

하위 키워드 = Session.query (
    하위 키워드 .subkeyword_id,
    하위 키워드.
) .filter_by (
    subkeyword_company_id = self.e_company_id,
    subkeyword_word = subkeyword_word,
    subkeyword_active = 참,
).하나()


답변

중간 결과 / 객체를 저장하고 다음 메소드를 호출하십시오 (예 :

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()


답변

Python Language Reference 에 따르면
백 슬래시를 사용할 수 있습니다.
아니면 간단히 깨십시오. 대괄호가 쌍을 이루지 않으면 파이썬은 그것을 대괄호로 취급하지 않습니다. 이러한 상황에서 다음 줄의 들여 쓰기는 중요하지 않습니다.


답변

때로는 다른 사람들이 제공하는 것과는 약간 다른 해결책이지만 때로는 멋진 메타 프로그래밍으로 이어지기 때문에 내 마음에 드는 것입니다.

base = [Subkeyword.subkeyword_id, Subkeyword_word]
search = {
    'subkeyword_company_id':self.e_company_id,
    'subkeyword_word':subkeyword_word,
    'subkeyword_active':True,
    }
subkeyword = Session.query(*base).filter_by(**search).one()

이것은 검색을 작성하기위한 좋은 기술입니다. 복잡한 쿼리 양식 (또는 사용자가 찾고있는 것에 대한 문자열 기반 추론)에서 채굴하기위한 조건 목록을 살펴본 다음 사전을 필터로 분해하십시오.


답변

SQLAlchemy를 사용하는 것 같습니다. true 인 경우 sqlalchemy.orm.query.Query.filter_by()method는 여러 개의 키워드 인수를 사용하므로 다음과 같이 작성할 수 있습니다.

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()

그러나 더 나을 것입니다 :

subkeyword = Session.query(Subkeyword.subkeyword_id,
                           Subkeyword.subkeyword_word)
subkeyword = subkeyword.filter_by(subkeyword_company_id=self.e_company_id,
                                  subkeyword_word=subkeyword_word,
                                  subkeyword_active=True)
subkeuword = subkeyword.one()