2016-06-14 8 views
1

Ich bin neu in Python und ich habe ein Python-API zu entwerfen (Version - 2.7), ähnlich ein bestehendes Java APIPython API-Design für bestehende Java API

Python-Version - 2.7

Die Java API ist als

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 
} 

Die äquivalente Python API folgt Design, das ich gekommen sind, mit ist

Ausrichtung1

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 

Ansatz2

Kann ich Verschlüsse verwenden, um direkt den Kontext zu dem Erstellen Funktion der Process-Klasse übergeben, so dass ich die Client-Klasse beseitigen

Hinweis Das erstellen Die Methode der Process-Klasse verarbeitet asynchrone Tasks, die mit dem Paket concurrent.futures aus Python ausgeführt werden können.

Ich will gut, welche der zwei Ansätze wissen ist,

auch offen als auch zu einem besseren Ansätzen.

Antwort

1

Im Allgemeinen ich Schließung verwenden würde Funktion zum Erstellen von Vorlagen, wie in dem Fall, wo ich viele Funktionen derselben Vorlage mit verschiedenen Variablen

Beispiel

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

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

In Ihrem Fall Schließung generieren möchten nicht funktioniert Sehen Sie eine gute Alternative wie in Schließung können Sie nur die Variablen ändern, aber die Funktionsprozedur (Vorlage) ist konstant, während in normalen Klasse mit Vererbung gibt es Ihnen viel mehr Freiheit

+0

Vielen Dank für die Antwort. Könnten Sie sagen, wie ich den Kontext direkt an die create-Funktion der Prozessklasse übergeben kann – user3451476

+0

, die wäre einfach nur Client-Objekt erstellen und übergeben Sie es direkt zu verarbeiten wie diese erstellen (Client(). Ausführen (Kontext)) – Hani

+0

Client ist ein Auszug Klasse hier – user3451476