如何在python中动态实例化类?

时间:2014-03-04 11:16:25

标签: python cherrypy

我在CherryPy中使用方法调度程序。在服务器的server / start.py部分,我需要实例化API类。

为了使它更加模块化,而不是将所有内容都放在start.py文件中,我就这样编码了。

所以,我有一个包含所有实例化api类的dict。

services = {}
user = UserResource() #api class
foo = FooResource() #api class
services = {"user":user, "foo":foo}

class Server(object):
    """Initialise the Cherrypy app"""
    #for service in services:
    user = services.values()[0]


cherrypy.quickstart(Server())

有效。但是,如果我做services.keys()[0] = services.values()[0]它根本不起作用。没有路线。

我该怎么做?我不必将它分配给服务器类中的特定类,而是使用键来添加路由。

2 个答案:

答案 0 :(得分:1)

services.keys()只返回一个列表。将该列表的第一个元素设置为任何内容将不起作用。

我希望你能做services[services.keys()[0]] = services.values()[0],虽然我无法想象你想用这个代码做什么。

修改

好的,我想我明白你想做什么。似乎CherryPy依赖于类级属性来定义它将服务的路由。 docs显示了如何动态执行此操作。在你的情况下,你可以做这样的事情:

class Server(object):
    pass

for k, v in services:
    setattr(Server, k, v)

请注意,setattr必须在类定义本身之外完成,因为类主体内不存在服务器名称。

答案 1 :(得分:0)

如果您希望获得更多路由灵活性,请使用RoutesDispatcher