2017-12-02 14 views
0

저는 파이썬을 배우고 있으며, 일반적으로 프로그래밍하고 있으며, 저는 철학적 관점에서 볼 때 뭔가 궁금합니다. 구체적으로 말하자면, 클래스 내의 개별 메소드를 완전히 모듈화하거나 각기 다른 방식으로 종속시키는 것이 이치에 맞는지 궁금합니다.모듈화 또는 종속/링크 된 메서드를 만드는 것이 합리적입니까?

예를 들어, 현재 사용중인 경우, 클래스의 모든 메서드를 종속 정렬 방식으로 사용합니다. 즉, 한 메서드의 출력 또는 반환 값을 사용하여 다음 메서드의 매개 변수로 사용됩니다. 이 경우에는 다음 메소드에서 해당 메소드의 값을 직접 호출하는 것이 더 쉬울 지 모르지만 여전히 일반 매개 변수를 사용하고 모듈 방식으로 코드화 한 다음 스크립트를 실행할 때 다소 긴 종속성 체인을 나열합니다. 그것을 부르기 위해. 제가 말한 것이 의미가 있을지 모르겠으므로 예제를 보여 드리지만, 저는 여러분의 의견을 듣고 싶습니다. 감사!!

는 클래스의 메소드의 2의

모듈 예 을 :이 호출하면, 그 다음 긴 목록 결과

def get_token(self, values, url): 
    self.values = values 
    self.url = url 
    tls_version = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 
    data = urllib.parse.urlencode(self.values).encode("utf-8") 
    req = urllib.request.Request(self.url, data) 
    res = urllib.request.urlopen(req, context=tls_version).read() 
    response_js = json.loads(res) 
    return response_js 

def parse(self, json_block): 
    self.json_block = json_block 
    token = self.json_block['access_token'] 
    inst_url = self.json_block['instance_url'] 
    return token, inst_url 

(즉) :

self.parse(get_token(values, url)) ... and this goes on as there are several other methods 

그것은에 관해서 종속적 인 예제 ... 본질적으로 비슷하지만 매개 변수 지정을 허용하는 대신 기능에서 get_token()에서 검색된 데이터 만 사용합니다. 이것은 더 짧은 방법을 허용 할 것이고 또한 전화하기가 훨씬 쉬울 것이지만, 다목적 성을 허용하지 않기 때문에 이것이 잘못된 방법 일 것이라고 걱정한다.

의견에 대한 의견이 있으시면 대단히 감사하겠습니다.

답변

0

내 개인적인 견해로는 (이게 무엇인지), 가장 유용한 방법은 모두를 서로 분리시키는 것입니다. 그러나 모두 함께 계산하는 기능이 있어야합니다. 다른 기능이나 그런 고통스러운 아무것도 통해 이동하지 않고, 당신이 원하는 매개 변수 Foo.method3 호출하고 바로 그것의 결과를 얻을 수 있습니다, 여기에

class Foo: 
    def method1(self, var1, var2): 
     # do things 
     return var3, var4 

    def method2(self, var1, var2): 
     # do things 
     return var3 

    def method3(self, var1): 
     # do things 
     return var3, var4, var5 

    def method4(self, var1, var2, var3): 
     # do things 
     return var3 

    def calculate_meaning_of_life(self, var1, var2): 
     inter_var1, inter_var2 = method1(var1, var2) 

     inter_var3 = method2(inter_var1, inter_var2) 

     inter_var4, inter_var5, inter_var6 = method3(inter_var3) 

     answer = method4(inter_var4, inter_var5, inter_var6) 

     return answer # happens to always output 42 

:

코드를 참조하십시오. 또한, 원하는 변수를 사용하여 Foo.calculate_meaning_of_life func (참고 : 한 줄에없는 것은 매우 읽을 수 없으므로)를 호출하면 모두를 빠르게 함께 계산할 수 있으며 모든 힘든 작업을 수행 할 수 있습니다.

특히 디버그 관점에서 볼 때, 모두를 개별적으로 호출하고 반환하는 것을 분석 할 수 있기를 바랍니다. 결과적으로 하나의 함수 만 갖고있는 것이 아닌 결국 함께 실행될 수 있기 때문입니다.

또한 다른 사람들이 설치할 패키지를 만들면 특정 프로젝트에 Foo.method2을 사용하는 이유를 찾을 수 있으므로 작성한 모든 코드를 가능한 한 쉽게 액세스 할 수 있도록해야합니다.

희망이 도움이됩니다.

0

나는보기에 당신과 다른 사람들도 당신의 코드를 검토해야하기 때문에 가독성을위한 것입니다. 이런면에서 당신에게 적합한 방법이 필요합니다.

이 다른 별개의 모든 방법을 계속 :

이 내 방법입니다.헬퍼 메소드의 사용을 고려하고 있다면, 그것들을 사용하는 메소드에 보관하는 것이 좋을 것입니다. (같은 조작으로 많이 사용되는 경우) 자신의 클래스에 그룹화 할뿐입니다.

class MyClass2: 
    def helper(self): 
     return "help!" 

    def method1(self): 
     return "I use " + self.helper() 

    def method2(self): 
     return "I also use " + self.helper() 

대신

의 :이 예를 들어, 하나 이상의 다른 인스턴스 방법으로 사용되지 않는

class MyClass: 
    def distinct_method(self): 
     def distinct_helper(): 
      # helper 
      return ", right?" 
     # do some distinct stuff 
     return other_distinct_method() + distinct_helper() 

    def other_distinct_method(self.): 
     # do some other distinct stuff 
     return "it should be distinct" 

if __name__ == "__main__": 
    print MyClass().distinct_method() 

엄지 손가락의 좋은 규칙은 도우미 메서드를 클래스의 부분을하지 않는 것입니다

class MyClass1: 
    def helper(self): 
     return "help!" 

    def method1(self): 
     return "I use " + self.helper() 

    def method2(self): 
     return "I don't use helper!"