首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python有没有等同于Java Class.forName()的东西?

python有没有等同于Java Class.forName()的东西?
EN

Stack Overflow用户
提问于 2009-01-17 08:10:49
回答 6查看 57.6K关注 0票数 101

我需要接受一个字符串参数,并在Python中创建在该字符串中命名的类的对象。在Java语言中,我会使用Class.forName().newInstance()。在Python中有没有等价物?

感谢您的回复。为了回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它。我实际上是在用Jython编程并实例化Java类,这就是问题的Java性质。getattr()运行得很好。非常感谢。

EN

回答 6

Stack Overflow用户

发布于 2009-01-17 08:13:06

假设类在您的作用域中:

代码语言:javascript
复制
globals()['classname'](args, to, constructor)

否则:

代码语言:javascript
复制
getattr(someModule, 'classname')(args, to, constructor)

编辑:注意,你不能给getattr起一个像'foo.bar‘这样的名字。你需要把它拆分。并从左到右对每个块调用getattr()。这将会处理这个问题:

代码语言:javascript
复制
module, rest = 'foo.bar.baz'.split('.', 1)
fooBar = reduce(lambda a, b: getattr(a, b), rest.split('.'), globals()[module])
someVar = fooBar(args, to, constructor)
票数 27
EN

Stack Overflow用户

发布于 2015-05-05 09:00:38

代码语言:javascript
复制
def import_class_from_string(path):
    from importlib import import_module
    module_path, _, class_name = path.rpartition('.')
    mod = import_module(module_path)
    klass = getattr(mod, class_name)
    return klass

用法

代码语言:javascript
复制
In [59]: raise import_class_from_string('google.appengine.runtime.apiproxy_errors.DeadlineExceededError')()
---------------------------------------------------------------------------
DeadlineExceededError                     Traceback (most recent call last)
<ipython-input-59-b4e59d809b2f> in <module>()
----> 1 raise import_class_from_string('google.appengine.runtime.apiproxy_errors.DeadlineExceededError')()

DeadlineExceededError: 
票数 20
EN

Stack Overflow用户

发布于 2010-08-31 22:41:59

还有另一种实现。

代码语言:javascript
复制
def import_class(class_string):
    """Returns class object specified by a string.

    Args:
        class_string: The string representing a class.

    Raises:
        ValueError if module part of the class is not specified.
    """
    module_name, _, class_name = class_string.rpartition('.')
    if module_name == '':
        raise ValueError('Class name must contain module part.')
    return getattr(
        __import__(module_name, globals(), locals(), [class_name], -1),
        class_name)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/452969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档