2016-06-14 3 views
1

Я новичок в Python, и я должен разработать Python API (версия - 2.7), аналогичную существующей Java APIPython дизайн API для существующих Java API

Python версии - 2,7

Java- API выглядит следующим образом

public interface Process<T> { 

    Future<T> create(Client<T> client) 

    //Other methods 
} 

public interface Client<T> extends Serializable { 

    T execute(ClientContext c) 

    //Other methods 
} 

public interface ClientContext { 

    File createFile(String path) 

    //Other methods 
} 

эквивалент дизайн Python API, который я придумал это

Approach1

class Process: 
    __metaclass__ = ABCMeta 

@abstractmethod 
def create(self, client): 
    pass 

class Client: 
    __metaclass__ = ABCMeta 

@abstractmethod 
def execute(self, context): 
    pass 

class ClientContext: 
    __metaclass__ = ABCMeta 

@abstractmethod 
def createFile(self, path): 
    pass 

Approach2

Могу ли я использовать затворы непосредственно передать контекст для создания функции класса процессов, так что я могу устранить класс Client

Примечание создать метод класса Process будет обрабатывать async-задачи, которые могут быть выполнены с использованием пакета concurrent.futures из python.

Я хочу знать, какой из 2-х подходов хорошо

Также открыты для лучших подходов, а также.

ответ

1

В целом я хотел бы использовать замыкание для создания шаблонов функций, как и в случае, когда я хочу, чтобы генерировать множество функций одного и того же шаблона с различными переменными

например

def add(x): 
    def addto(y): 
     return x+y 
    return addto 

addto5 = add(5) 
print addto5(1) 
#will print 6 

В вашем закрытии дела не выглядите хорошей альтернативой, так как в закрытии вы можете изменять переменные, но функциональная процедура (шаблон) постоянна, а в нормальном классе с наследованием она даст вам гораздо больше свободы.

+0

Благодарим за отзыв. Не могли бы вы рассказать, как я могу передать контекст непосредственно функции create класса Process – user3451476

+0

, что было бы просто просто создать объект клиента и передать его непосредственно для обработки, как этот create (Client(). Execute (context)) – Hani

+0

Клиент является абстрактным класс здесь – user3451476