2009-10-27 3 views
2

저는 2 주 동안 만 파이썬 코드를 작성해 왔기 때문에 아직 토지를 알아 냈습니다. 그러나 나는 내부적으로 무거운 것을 사용하는 것뿐만 아니라 때때로 '사용자'가 호출 할 수있는 메소드가 있다고 가정 해 봅시다 (즉, 호출 전에 인수가 이미 검사되었습니다). 다음은 현재 수행중인 작업입니다.Python : 공개 메소드가 '형제'비공개 메소드를 호출합니다.

#The method the 'user' should call: 
def do_something(self, arg1, arg2, arg3): 
    #write code to do error checking on arg1, agr2, arg3 
    #raise exceptions, return codes, etc: depends on whether you are an explicit lover 
    #or an implicit lover, it seems. :-) 
    ... error checking code here... 
    #Now call the 'brother' method that does the real work. 
    return self._do_something(self, arg1, arg2, arg3, arg3) 

#The method other private methods should call with already validated parameters 
def _do_something(self, arg1, arg2, arg3, arg3): 
    #don't do error checking on the parameters. get to work... 
    ... do what you do... 
    return whatever you're supposed to return 

이것은 논리적입니다. 이 작업을 수행하는 더 좋은 Python-ish 방법이 있습니까?

폴 파이썬에서 개인 회원에 대한 "true"를 지원하지만, 개인 두 개의 주요 밑줄을 사용하는 것 같은 멤버를 표시하기 위해 파이썬 방법은 없습니다

답변

2

괜찮습니다. "brother"메서드 호출은 코드에서 잘못되었습니다. 이것을 다음과 같이해야합니다 :

즉, 객체 메소드이고 전역 함수가 아니기 때문에 자체 참조를 "통과"해야합니다.

+0

네, 고마워요. – TallPaul

+0

제안 된대로 편집 된 메서드 호출. – TallPaul

0

. 귀하의 경우 __do_something 자세한 내용은

은, 난 그냥 파이썬에게 자신을 학습 (그리고 그것을 즐기는)하고있어 python.org - classes

+0

클로저를 사용하여 로컬 변수를 참조하는 자체 __init__ 내부의 개체에 함수를 추가하여 실제 개인 필드를 만들 수 있습니다. 많은 사람들이 이것을 알고있는 것 같지는 않지만. – recursive

+1

-1 : 두 개의 밑줄은 실제로 거의 사용되지 않습니다. 보통 파이썬적인 방법은 밑줄 하나입니다. – nikow

+0

@nikow, 당신은 틀 렸습니다. 두 개의 밑줄은 파이썬에서 "개인"을 수행하는 방법이며, 언어 지원도합니다 (이름은'__foo'에서'_ClassName__foo'로 munged됩니다). 하나의 밑줄 만 사용하는 "보호 된"멤버에 대해서는 파이썬의 * convention * (그리고 그것만이 그것입니다)을 생각할 수도 있습니다. –

-1

를 볼 수 있지만 나는 그것을 할 수있는 방법을 생각합니다. 그러나 개인 메서드는 두 개의 밑줄이 있어야하며 'self .__ do_something()'과 같이 호출해야합니다.

0

오류 검사 코드가 매우 비싸지 않는 한, 오류 검사를 항상 수행하는 방법은 하나뿐입니다. 몇 가지 수표를 반복 할 수는 있지만 더 많은 보안을 제공하며 다른 사람이 수업을 상속 받으면 편리 할 수 ​​있습니다.

나중에 성능이 필요한 경우 결과를 캐시하거나 다른 작업을 수행 할 수 있습니다.

+0

제 경우에는 biopython 모듈을 다시 작성하고 있습니다. 4 문자 코드를 기반으로 FTP에서 파일을 다운로드하는 방법이 있습니다. 사용자는 한 파일을 개별적으로 호출하여 다운로드하거나 인덱스 파일에 기록 된 코드를 기반으로 다운로드 할 57000 개 이상의 파일을 요청할 수 있습니다. 사용자가 코드를 호출하면 코드가 전달되었는지 확인해야합니다. 코드가 57000 코드가있는 인덱스 파일에서 나온 경우 올바른 형식인지 확인하지 않아도됩니다. 그 경우에는 – TallPaul

+0

두 가지 방법을 구분하는 것이 좋습니다. 하나의 메소드가 사용자 입력과 함께 사용되고 다른 메소드가 사용되지 않는다는 것을 분명히하기 위해 다른 이름을 사용합니다. –

관련 문제