2017-02-17 3 views
1

좋은 파이썬 연습입니까?멤버를 복사하여 인터페이스를 제공하는 방법으로 사용

import threading 
import Queue 

class Poppable(threading.Thread): 
    def __init__(self): 
     super(Poppable, self).__init__() 
     self._q = Queue.Queue() 
     # provide a limited subset of the Queue interface to clients 
     self.qsize = self._q.qsize 
     self.get = self._q.get 
    def run(self): 
     # <snip> -- do stuff that puts new items onto self._q 
     # this is why clients don't need access to put functionality 

회원의 기능을 포함하는 클래스의 인터페이스까지 "승격"하는 방법은 Python의 스타일 또는 Zen을 위반합니까?

은 주로 내가 일반적으로 선언 래퍼 함수를 ​​포함하는 것보다 하나의 표준으로이 방법을 대조하기 위해 노력하고있어 :

def qsize(self): 
     return self._q.qsize() 
    def get(self, *args): 
     return self._q.get(*args) 

답변

0

나는 그렇게 생각하지 않는 것은 파이썬 다릅니다. 일반적으로 좋은 OOP 방식입니다. 포함 된 큐의 내부를 숨기고 클라이언트가 알아야하는 함수 만 노출합니다. 이것은 객체를 래핑 할 때 일반적인 접근이며, 최소 지식이 인 원칙을 완전히 준수합니다.

만약, 대신 self.qsize 클라이언트는 쉽게 그 나중에 필요한 경우 qsize 방법이없는 다른 데이터 유형과 _q을 변경할 수 self._q.qsize 전화를했다. 따라서 사용자의 접근 방식은 미래의 가능한 변경 사항에 대해 개체를보다 개방적으로 만듭니다.