У меня есть мало проблемы с импортом классов в 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"
Внизу индексного файла вы создаете объект HtmlTemplate
и вызываете все методы для него. Поскольку этот код не содержится ни в каком другом блоке, он запускается при импорте модуля. Вам нужно либо удалить его, либо проверить, запускается ли файл из командной строки.
if __name__ == "__main__":
objx=HtmlTemplate()
objx.Header()
objx.Body()
objx.Form()
objx.Footer()
objx.CloseHtml()
У вас есть следующий код в верхней и нижней части 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()
... или лучше поместить этот код в функции, которые могут быть вызваны из другого места.
Что вы пробовали? Нормальным способом использования методов класса Template
после импорта будет следующий.
from index import Template
t = Template()
t.header()
t.body()
t.footer()
ETA: в конце вашего файла index.py
(строки 99-105) вы вызываете все функции из определенного выше класса Template
. Вот почему вы видите дубликаты.
Я не уверен, правильно ли я вас понял, но мне кажется, вы спрашиваете, как импортировать класс template
в другой сценарий. Оператор import
- это то, что вам нужно:
from index import template
foo = template()
foo.header()
foo.body()
foo.footer()
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
и вызвать все методы.