2009-11-16 3 views
5

Поскольку я в настоящее время изучаю Django/Python, я еще не использовал концепцию Classes. Насколько мне известно, этот метод не статичен. Это стандартное определение.Метод вызова из другого файла Python

Так скажем, у меня есть этот пакет под названием Example1 с views.py, который содержит этот метод:

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

Тогда у меня есть Example2, который также имеет views.py, где я хотел бы использовать этот метод adder.

Как я мог это сделать?

EDIT: В Java это будет простой экземпляр, а затем instantiation.Method(), или если он был статическим, это было бы SomeClass.Method(), однако я не уверен, как я должен подходить к этому в Python.

ответ

7

Python имеет методы уровня и уровня уровня. В этом понятии «модуль» - это особый класс, который вы используете с помощью import вместо Name(). Попробуйте

from Example1.views import adder as otherAdder 

, чтобы получить доступ к методу уровня модуля. Теперь вы можете позвонить otherAdder() и выполнить код в другом модуле. Обратите внимание, что метод будет выполняться в контексте Example1.views, то есть когда он ссылается на вещи, он будет выглядеть там.

+0

Благодарим вас за понимание методов уровня «модуль» и «класс». Я должен буду изучить это. Еще раз спасибо за подробный ответ. – Federer

6

Try:

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

Если вы не уверены, вы всегда можете запустить оболочку Python, а затем использовать команду dir, чтобы заглянуть внутрь содержимого пакетов, чтобы увидеть, что может быть использовано.

Edit: Обновление от комментариев использовать 'как'

ИЛИ

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

Это должно сработать, но переписать потенциальный локальный сумматор ... _bravado писал о ... – Juergen

+0

add: Или локальный сумматор перезапишет импортированный, конечно ... (я бы предложил из ... import сумматор как сумматор2) – Juergen

3

Обычно импорт "модулей"

Я хотел бы предложить:

from Example2 import views as views2 

x = views2.adder(1, 2) 

I надеюсь, я понял это правильно, так как я не использовал пакеты до n ow ;-)