我需要获取一个字符串参数,并在Python中创建该字符串中指定的类的对象.在Java中,我会使用Class.forName().newInstance().Python中有相应的东西吗?
谢谢你的回复.要回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它.我实际上是在Jython中编程并实例化Java类,因此问题的Java-ness. getattr()效果很好.非常感谢.
我是Python的新手,需要一些建议来实现下面的场景.
我在两个不同的注册商处有两个用于管理域名的课程.两者都具有相同的界面,例如
class RegistrarA(Object):
def __init__(self, domain):
self.domain = domain
def lookup(self):
...
def register(self, info):
...
Run Code Online (Sandbox Code Playgroud)
和
class RegistrarB(object):
def __init__(self, domain):
self.domain = domain
def lookup(self):
...
def register(self, info):
...
Run Code Online (Sandbox Code Playgroud)
我想创建一个Domain类,给定一个域名,根据扩展名加载正确的注册器类,例如
com = Domain('test.com') #load RegistrarA
com.lookup()
biz = Domain('test.biz') #load RegistrarB
biz.lookup()
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用工厂函数来完成(见下文),但这是最好的方法吗?还是有更好的方法使用OOP功能?
def factory(domain):
if ...:
return RegistrarA(domain)
else:
return RegistrarB(domain)
Run Code Online (Sandbox Code Playgroud) 我正在使用构建器模式来分离一堆不同的配置可能性.基本上,我有一堆名为ID的类(类似于ID12345).这些都继承自基础构建器类.在我的脚本中,每次运行此应用程序时,我都需要为每个类(大约50个)实例化一个实例.所以,我试图看看是否代替做这样的事情:
ProcessDirector = ProcessDirector()
ID12345 = ID12345()
ID01234 = ID01234()
ProcessDirector.construct(ID12345)
ProcessDirector.construct(ID01234)
ID12345.run()
ID01234.run()
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情(我知道这不起作用):
IDS = ["ID12345", "ID01234"]
ProcessDirector = ProcessDirector()
for id in IDS:
builder = id() #some how instantiate class from string
ProcessDirector.construct(builder)
builder.run()
Run Code Online (Sandbox Code Playgroud)
这样,当我需要在将来添加一个新的时,我所要做的就是将ID添加到IDS列表中,而不是在整个代码中添加新的ID.
看起来根据数据的来源,有一些不同的意见.这些ID输入到其他人无法访问的文件中.我不是从命令行读取字符串,并且我希望将来在添加新ID时能够进行少量更改.