2017-02-17 58 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的風格或禪宗?

主要是我想用更標準的一個,通常會涉及聲明包裝函數來對比這種方法:

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

回答

0

我不認爲這是Python的具體。一般來說,這是一個很好的面向對象操作。只公開你需要客戶端知道的函數,隱藏包含的隊列的內部部分。這是包裝對象時的典型做法,完全符合最少知識原則

如果,而不是self.qsize客戶只好打電話self._q.qsize,你不能輕易改變_q用不同的數據類型,如果以後需要它不具有qsize方法。因此,您的方法可以使對象對未來可能發生的變化更加開放。

相關問題