2014-01-08 4 views
2

비슷한 질문이 이미 있습니다. "When and how to use the builtin function property() in python"하지만이 것은 하나의 것이 다릅니다. 이 때 속성은 인터페이스에서 찾고 있기 때문에Getter 메서드와 읽기 전용 속성

class Downloader(): 

    ... 

    def get_unfinished_tasks_count(self): 
     return self.executor._work_queue.unfinished_tasks 

을 : 나는 그것을 할 더 나은 생각

class Downloader(): 

    def __init__(self, max_workers): 
     self.executor = ThreadPoolExecutor(max_workers) 

    @property 
    def unfinished_tasks_count(self): 
     return self.executor._work_queue.unfinished_tasks 

:

나는 몇 가지 작업 진행의 카운터를 얻을 수있는 방법을 필요로하는 클래스가 (문서 및/또는 소스 코드를 보지 않고) 그것은 읽기 전용의 계산 된 특성이라는 것을 명시하지 않습니다. 메소드 일 때 계산 된 값의 getter 일 뿐이며 API 클라이언트가 설정할 수있는 단순한 속성이 아닙니다.

내 질문은 : getter 메서드를 사용하는 경우 읽기 전용 속성 대?

+0

_read-only_를 원한다면 게터 기능이 더 좋을 것 같습니다. – aIKid

답변

3

속성 사용은 귀하의 의도를 나타내고 귀하의 동료에게 합당한 기대치를 제공해야합니다. 이 아닌 일정 시간이 걸릴 수도있는 계산을 포함 할 경우

  • :

    속성을 사용하지

    . 이것은 속성에 액세스하는 것이 빠른 일이라는 직관에 어긋납니다.
  • 외부 상태가있을 때 이는 상대방이 아닌 다른 사람이 속성에 액세스 할 때 변경됩니다. 그렇게하면 속성에 두 번 액세스하면 같은 결과가 나타납니다. 반면에 메서드 호출의 결과가 두 번 필요할 때 대개 로컬 변수에 저장하고 그 사이에서 변경되지 않도록합니다. 속성을 사용하지 않을 경우
    • 이 주로 부담 (구문)이된다 :

  • 언제 속성을 사용합니다.
  • 특정 인터페이스 (오리 입력)를 구현해야 할 때 다른 방법은 없습니다.

평상시와 마찬가지로 질문에 대한 대답은 맛이 좋으며 엄격한 규칙이 없습니다. 이 지침은 많은 경우 잘 처리 할 수 ​​있지만 상식을 적용 할 필요성을 제거하지는 못합니다.