2017-02-17 8 views
1

この良いPythonの練習ですか?メンバーをコピーしてインターフェイスを提供する方法として

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

私はPythonの特定ではないと思います。一般的に、これは良いOOPのプラクティスです。クライアントに必要な機能だけを公開し、含まれているキューの内部を隠します。これは、オブジェクトをラッピングするときの典型的なアプローチであり、最小知識のの原則に完全に準拠しています。

代わりself.qsizeのクライアントがself._q.qsizeを呼び出す必要があった、場合、あなたは簡単にそれが後で必要になった場合qsizeメソッドを持っていない別のデータ型、と_qを変更することはできません。したがって、あなたのアプローチは、今後の可能な変更に対してオブジェクトをよりオープンにします。

関連する問題