2017-02-17 11 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, если это требуется позже. Таким образом, ваш подход делает объект более открытым для возможных будущих изменений.