2009-11-16 10 views
5

Ponieważ obecnie uczę się Django/Python, tak naprawdę nie używam jeszcze koncepcji klas. O ile mi wiadomo, metoda nie jest statyczna ... to tylko standardowa definicja.Metoda wywołania z innego pliku Pythona

Więc powiedzmy, że mam ten pakiet o nazwie Example1 z views.py zawierający tę metodę:

def adder(x,y): 
    return x + y 

Wtedy mam Example2 który również ma views.py gdzie chciałbym skorzystać z tej metody adder.

Co mam zrobić?

EDYCJA: W Javie byłaby to prosta instancja, a następnie instantiation.Method() lub jeśli byłaby statyczna, byłaby to SomeClass.Method(), ale nie jestem pewien, jak powinienem podejść do tego w Pythonie.

Odpowiedz

7

Python ma metody na poziomie modułu i klasy. W tej koncepcji "moduł" jest bardzo specjalną klasą, którą uzyskuje się przy użyciu import zamiast Name(). Wypróbuj

from Example1.views import adder as otherAdder 

, aby uzyskać dostęp do metody modułu. Teraz możesz zadzwonić pod numer otherAdder(), a program wykona kod w drugim module. Zauważ, że metoda zostanie wykonana w kontekście Example1.views, tj. Gdy odwoła się do rzeczy, będzie tam wyglądać.

+0

Dziękujemy za wgląd w poziom "modułu" i metody "klasy". Będę musiał się nad tym zastanowić. Jeszcze raz dziękuję za dokładną odpowiedź. – Federer

6

Spróbuj:

from Example2.views import adder as myadder 
myadder(x,y) 

Jeśli nie jesteś pewien, zawsze można uruchomić powłokę Pythona, a następnie użyć polecenia dir zajrzeć zawartości pakietów, aby zobaczyć, co może być wykorzystane.

Edycja: Aktualizacja z komentarzami do wykorzystania 'jako'

LUB

# use ...views as myviews if you need to avoid name conflict on views 
from Example2 import views 
views.adder(x,y) 
+2

To powinno działać, ale nadpisałoby potencjalnego lokalnego sumatora ... _bravado pisał o ... – Juergen

+0

add: Lub lokalny adder mógłby nadpisać importowany oczywiście ... (sugerowałbym od ... import adder as adder2) – Juergen

3

Normalnie importowania "moduły"

Proponuję:

from Example2 import views as views2 

x = views2.adder(1, 2) 

I Mam nadzieję, że mam rację, ponieważ nie korzystałem z pakietów do n ow ;-)