2017-02-17 52 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方法。因此,您的方法可以使对象对未来可能发生的变化更加开放。

相关问题