从另一个文件导入类及其功能

时间:2010-06-01 10:38:03

标签: python class

我在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

6 个答案:

答案 0 :(得分:7)

你有什么尝试?以下是导入后使用Template类方法的常规方法。

from index import Template

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

ETA:index.py文件的末尾(第99-105行),您正在调用上面定义的Template类中的所有函数。这就是你看到重复的原因。

答案 1 :(得分:2)

修改:好的,根据您的代码,我知道您的问题是什么。

您正在呼叫以下内容:

## 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 :(得分:2)

在索引文件的底部,创建一个HtmlTemplate对象并调用其上的所有方法。由于此代码未包含在任何其他块中,因此在导入模块时会执行该代码。您需要将其删除或检查文件是否正在从命令行运行。

if __name__ == "__main__":
    objx=HtmlTemplate()
    objx.Header()
    objx.Body()
    objx.Form()
    objx.Footer()
    objx.CloseHtml()

答案 3 :(得分:1)

我不确定我是否理解正确,但我相信您正在询问如何在另一个脚本中导入template类。您需要import语句:

from index import template

foo = template()

foo.header()
foo.body()
foo.footer()

答案 4 :(得分:1)

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()

每次import 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()

...或更好地保留了可以从其他地方调用的代码函数

答案 5 :(得分:1)

以下解决方案对我有用:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    UIApplication.shared.statusBarStyle = .lightContent
    return true
}