импорт класса и его функции из другого файла

У меня есть мало проблемы с импортом классов в Python. Мой поток операций идет как это

index.py

    class Template:

        def header():
        def body():
        def form():
        def footer():

display.py

Я хочу вызвать функцию header(), body() и footer () в моем display.py страница. Будет любой ясно давать понять меня об этой проблеме в Python. Спасибо за Ваше беспокойство.

Индексный файл---[Index.py] [1]

[1]: http://pastebin.com/qNB53KTE и display.py - "http://pastebin.com/vRsJumzq"

5
задан MysticCodes 1 June 2010 в 11:24
поделиться

5 ответов

Внизу индексного файла вы создаете объект HtmlTemplate и вызываете все методы для него. Поскольку этот код не содержится ни в каком другом блоке, он запускается при импорте модуля. Вам нужно либо удалить его, либо проверить, запускается ли файл из командной строки.

if __name__ == "__main__":
    objx=HtmlTemplate()
    objx.Header()
    objx.Body()
    objx.Form()
    objx.Footer()
    objx.CloseHtml()
2
ответ дан 18 December 2019 в 13:11
поделиться

У вас есть следующий код в верхней и нижней части index.py:

cgitb.enable()
print 'Content-type: text/html\n\n'
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >"

# [...]

## Calling all the functions of the class template with object (objx)
objx=HtmlTemplate()
# [...]      
objx.CloseHtml()

Он будет вызываться каждый раз, когда вы импортируете index.

Чтобы этого не произошло, поместите его в блок таким образом:

if __name__ == '__main__':
    cgitb.enable()
    print 'Content-type: text/html\n\n'
    print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >"

    # [...]

    ## Calling all the functions of the class template with object (objx)
    objx=HtmlTemplate()
    # [...]      
    objx.CloseHtml()

... или лучше поместить этот код в функции, которые могут быть вызваны из другого места.

1
ответ дан 18 December 2019 в 13:11
поделиться

Что вы пробовали? Нормальным способом использования методов класса Template после импорта будет следующий.

from index import Template

t = Template()
t.header()
t.body()
t.footer()

ETA: в конце вашего файла index.py (строки 99-105) вы вызываете все функции из определенного выше класса Template. Вот почему вы видите дубликаты.

7
ответ дан 18 December 2019 в 13:11
поделиться

Я не уверен, правильно ли я вас понял, но мне кажется, вы спрашиваете, как импортировать класс template в другой сценарий. Оператор import - это то, что вам нужно:

from index import template

foo = template()

foo.header()
foo.body()
foo.footer()
1
ответ дан 18 December 2019 в 13:11
поделиться

Edit: Хорошо, я понял, в чем ваша проблема, учитывая ваш код.

Вы вызываете следующее:

## Calling all the functions of the class template with object (objx)
objx=HtmlTemplate()
objx.Header()
objx.Body()
objx.Form()
objx.Footer()
objx.CloseHtml()

И затем в вашем display.py:

t = HtmlTemplate()
t.Header()
t.Body()

Видите, как Body() вызывается дважды?

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

Вы должны просто сконструировать объект один раз в display.py и вызвать все методы.

2
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: