2012-10-01 3 views
0

임 새 OOP에 새로운 따라서 하나의 질문이 있어요. 하나의 공개 메소드와 하나의 private 메소드를 가진 간단한 클래스가 있다고 가정 해 보겠습니다. 나는 대중 방법에 민간 메서드를 호출하는 경우 - 그것은 값을 반환해야합니다, 또는 그 값은 내 개체 예에 필드로 설정해야합니다파이썬 개인 메소드 반환 값

class Test: 
    def __init__(self, path): 
     self.path = path 
    def __getNoOfFiles(self): 
     'count files in self.path' 
     return no_of_files 
    def readDir(self) 
     ... 
     no_of_files = __getNoOfFiles() 

또는

class Test: 
    def __init__(self, path): 
     self.path = path 
     self.no_of_files = 0 
    def __getNoOfFiles(self): 
     self.no_of_files = 'count files in self.path' 
    def readDir(self) 
     __getNoOfFiles() 
     no_of_files = self.no_of_files 
+0

나는 당신이하려는 것을 이해하지 못합니까? – njzk2

+3

이 중 하나를 수행하면 안됩니다. 이것은 파이썬을 작성하는 방법이 아닙니다. 속성에 직접 액세스하십시오. –

+0

값을 반환하는 데 아무 문제가 없습니다 ... – sloth

답변

1

대부분의 경우 거의 차이가 없지만 길을 선택하는 데는 사소한 이유가 있습니다. 값이 두 번 이상 사용될 가능성이 있고 계산할 값이있는 경우 클래스 인스턴스에 값을 캐시하는 것이 도움이 될 수 있습니다. 그러나 클래스에는 인스턴스에서 값을 반환하는 메서드가 포함되어 있으므로 반환 값 옵션은 해당 스타일에 적합합니다.

일반적으로 눈에 띄는 것이 무엇이든간에.

1

당신은 그것을 할 수 있습니다 어느 쪽이든 .. 그것은 차이를 많이 내지 않는다. (하지만 중요한 차이점 중 하나는 두 번째 경우에 인스턴스에 대한 추가 인스턴스 속성을 생성한다는 것입니다. 다른 메소드에서이 인스턴스를 사용하려면, 그렇다면 적절합니다.) 또한 생성 된 인스턴스 속성을 사용하기 위해 공용 메소드에 local variable을 만들 필요가 없습니다. 다음과 같이 직접 액세스 할 수 있습니다. instance attribute에 ..

당신은 경우 공공 방법으로이 작업을 수행 할 필요가 없습니다 : -

no_of_files = self.no_of_files 

할 수 있습니다 그냥 access your instance attribute 직접 ..

그리고 당신은 호출해야합니다 당신의 방법을 self 예에 .. 당신은 단지 그것의 이름을 호출 할 수 없습니다 .. 을 그래서, 당신은 교체해야합니다 : -

__getNoOfFiles() 

: - 그냥 제안 -

self.__getNoOfFiles() 

그리고 __getNoOfFiles()__get_no_of_files()로 파이썬 없습니다.

0

정말 당신에게 달렸습니다. 외부에 readDir이 필요합니까? 그렇다면 저장하는 것이 좋습니다. 그렇지 않으면 ... 당신의 예에서, 당신은 no_of_files = self.__getNoOfFiles()를 사용해야

참고 :이 방법 전에 self 필요 ..

2

IMO getter 및 setter는 공개한다 즉, 메소드의 서명 앞에 이중 밑줄을 사용하지 마십시오. 또한 파이썬에서 값은 일반적으로 특정 클래스 인스턴스에서 사용하려는 경우에만 액세스됩니다.

getter 및 setter의 유용성에 대한 토론은 첫 번째 OOP 단계에서 더 많은 도움이 될 것입니다. 먼저 question을 읽어보십시오.