2010-05-18 14 views
7

Czy byłoby możliwe utworzenie interfejsu klasy w pythonie i różnych implementacjach interfejsu.Tworzenie interfejsu i wymienianych implementacji w pythonie

Przykład: Chcę utworzyć klasę dla dostępu POP3 (i wszystkich metod itp.). Jeśli wchodzę z komponentem komercyjnym, chcę go zawrzeć, aby zachować zgodność z umową.

W przyszłości, jeśli chcę użyć innego komponentu lub kodu, chcę być w stanie wymieniać rzeczy i nie mieć rzeczy bardzo ściśle powiązanych.

Możliwe? Jestem nowy w python.

Odpowiedz

0

Tak, jest to możliwe. Zazwyczaj nie ma ku temu przeszkód: wystarczy zachować stabilny interfejs API i zmienić sposób jego implementacji.

2

Oczywiście. W tym przypadku nie ma potrzeby tworzenia klasy bazowej lub interfejsu, ponieważ wszystko jest dynamiczne.

7

Dla osób pochodzących z mocno napisanego języka, Python nie potrzebuje interfejsu klasy. Możesz go symulować przy użyciu klasy bazowej.

class BaseAccess: 
    def open(arg): 
    raise NotImplementedError() 

class Pop3Access(BaseAccess): 
    def open(arg): 
    ... 

class AlternateAccess(BaseAccess): 
    def open(arg): 
    ... 

Ale można łatwo napisać ten sam kod bez użycia BaseAccess. Język mocno napisany wymaga interfejsu do sprawdzania typów podczas kompilacji. W przypadku Pythona nie jest to konieczne, ponieważ wszystko jest dynamicznie wyszukiwane w czasie wykonywania. Google 'duck typing' ze względu na swoją filozofię.

W Pythonie 2.6 dodano moduł abstrakcyjnych klas bazowych. Ale nie użyłem go.

+0

Dzięki msw. Nie wiem, że jeden użytkownik może edytować odpowiedź dla innego użytkownika :) –

+0

Tak, ale tylko dla sił dobra. Właściwie to było kaprysem, ponieważ nie mogłem powiedzieć niczego, czego nie było w twojej dobrze napisanej odpowiedzi. http://stackoverflow.com/faq (blisko dołu) – msw

1

Jedną opcją jest użycie zope interfaces. Jednak, jak stwierdzono przez Wai Yip Tung, nie trzeba używać interfejsów, aby osiągnąć te same wyniki.

Pakiet zope.interface jest bardziej narzędziem do odkrywania interakcji z obiektami (zazwyczaj w dużych bazach kodu z wieloma programistami).

Powiązane problemy