Python中的类指针行为

时间:2013-09-14 21:34:05

标签: python post web.py

我有两个模块。一个是基于web.py(我们将其命名为code.py)的网站的核心,另一个是附加模块(addon.py)。使用web.py,网站服务器的每个页面都应该在核心中有类定义,如:

class Page:  
    def GET(self):  
        variable = "Hello!"  
        return render.page_template(variable) #Here, it returns the rendered template to user  
    def POST(self):  
        post_variables = web.input()  
        pass #Doing something with those variables, maybe, writing in a database...  

现在我真的需要将该类定义从code.py移到addon.py。我可以将类定义称为addon.Page,而不仅仅是PagePage.GET函数仍然运行良好......但是POST有一个问题。似乎在核心模块中每次调用POST函数web.input()时,都将其设置为存储所有变量的存储对象。如果我的类定义存储在插件中,则核心只调用addon.Page.POST()(我认为无法改变此行为)。 POST()尝试获取web.input() ...然后失败 - web未在addon.py中导入,即使它已经导入,也不会有值web.py web-server正在获取 - 只是空字典,它只是模块的另一个实例。所以我不知道......
一种解决方案是:在addon.Page.POST()中添加某种功能。这个函数会向下移动一级,到code.py并执行web.input(),并将其返回给addon.py,某种访问父模块命名空间(如执行import __main__访问__main__.web.input()(据我所知,不鼓励)) 或者,例如,放置一些类似C的指针,这些指针将在模块之间共享,例如:
*在code.py中定义所有对code.addon.web_input()的调用都被路由到code.web.input()
*在addon.py中 - 只需拨打addon.web_input即可获取code.web.input()

的信息

在这种情况下我该怎么办?将有多个插件,每个插件都存储在此插件中的类定义,我应该能够轻松添加新模块,连接和断开现有模块,而无需修改code.py。我相信这在Python中是可能的......也许web.py源需要修改呢?

1 个答案:

答案 0 :(得分:1)

我想我会把我的评论变成答案,因为它似乎解决了你的问题。

导入的模块在Python中缓存。这意味着当您从多个其他模块导入类似web(主要web.py模块)的模块时,它们将获得具有相同内容的相同模块对象。

因此,您可能需要做的只是import web模块顶部的addon.py