2016-10-17 3 views
1

이것은 문제의 코드가 쉽게 분리 할 글자 수 제한 이전에 연산자 또는 괄호를 사용하지 않으므로이 사이트에서 찾은 비슷한 질문과 다릅니다. 필자는 파이썬에서 연산자 나 대괄호없이 여러 개의 긴 행을 79 자 전에 사용합니다. 예로서 :대괄호 또는 연산자가없는 파이썬에서 긴 줄을 끊는 방법?

self.caller.parent.parent.parent.caller.parent.bar.ids.actionview.remove_widget(self.caller.parent.parent.parent.caller.parent.bar.ids.actionview.startbutton) 

상기 라인 브래킷 전에 72 문자가있는, 따라서, 따라서 중첩 레벨 당 4 숯 간격 클래스 내 함수 정의 내에는 브래킷 전에 81 개 문자를 갖는다.

이 문제를 처리하는 가장 좋은 방법은 무엇입니까?

+1

가'self.caller.parent.parent.parent.caller.parent.bar.ids.actionview'에 액세스해야합니다

당신이 브래킷을 추가 할 수 있습니다 말했다 ? 이것은 끔찍한 프로그램 구조처럼 들립니다. – user2357112

+0

@ user2357112 그래, 다른 방법을 찾고 싶지만 kivy 환경에서 팝업과 같은 일부 위젯이 작동하는 방식은 부모 프로그램이 아니라 부모 프로그램으로 메인 프로그램 창을 가지고 있기 때문에 내가 만든 프로그램을 찾지 못했습니다. 이러한 분리 된 객체에 대한 함수 호출 내에서 위젯을 처리하는 방법. 사용자가 프로그램을 진행하면서 위젯을 동적으로 만들고 파괴해야하며 지금까지 나와있는 유일한 해결책이었습니다. 즉, 나는 OO 프로그래밍에 대해 분명히 새로운 것이므로 더 나은 방법이 있다고 확신한다. – Daniel

+0

'.'은 여전히 ​​연산자입니다. 그리고 항상 전체 표현식을 괄호로 묶을 수 있습니다. 우물에 대한 언급은 잘 알려져 있지만, a) 이와 같은 코드를 작성하지 말아야합니다. b) 필요한 경우, 몇 가지 변수로 나누십시오. –

답변

1

특히 예제를 사용하면 "이 코드를 읽을 수있게하십시오."라는 문제를 처음 해결하면 79 자로 자연스럽게 나타납니다.

도대체이 코드를 수행하는 이유
(self.caller.parent.parent 
.parent.caller.parent.bar 
.ids.actionview.remove_widget(
    self.caller.parent.parent 
    .parent.caller.parent 
    .bar.ids.actionview.startbutton) 
) 
+0

고맙습니다. 가독성에 관해서는, 나는 이것이 정말로 이상적이 아니라고 동의한다. 불행히도 깊이 중첩 된 객체가 있고 내가 사용하는 kivy 환경은 .kv 파일 내에서 정적 인 방법으로 정의되지 않은 한 id로 객체에 액세스 할 수 없습니다. 나는 객체를 동적으로 생성하고 파괴하므로 계층 내에서 객체를 직접 처리해야합니다. – Daniel

+0

아직도 내 머리 꼭대기에서 악의적 인 * 라이브러리가'mybar = self.caller.parent.parent.parent.caller.parent.bar'와 같은 것을 막을 수는 없다. 거기에서'mybar'. – Hurkyl

+0

좋은 지적은 ... 내가 할께. – Daniel

관련 문제