繁体   English   中英

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

[英]How to instantiate class in python dynamically?

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

为了使其更具模块化,而不是将所有内容都放入start.py文件中,我将其编码如下。

因此,我有一个字典,其中包含所有实例化的api类。

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]则根本无法使用。 没有路线。

我该怎么做? 在这里,我不必将其分配给服务器类中的特定类,而可以使用键来添加路由。

services.keys()只是返回一个列表。 将该列表的第一个元素设置为任何内容均无效。

我希望您想做services[services.keys()[0]] = services.values()[0] ,尽管我无法想象您要使用该代码做什么。

编辑

好的,我想我知道您想做什么。 看来CherryPy依靠类级别的属性来定义它将服务的路由。 文档显示了如何动态执行此操作。 在您的情况下,您可以执行以下操作:

class Server(object):
    pass

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

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

如果要具有更大的路由灵活性,请使用RoutesDispatcher

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM