如何通过__getattribute__从Python模块获取类或对象?

1 投票
1 回答
580 浏览
提问于 2025-04-17 06:38

我有一个这样的字符串:

classname = "Recipe"

现在我有一个模块叫“contenttype.py”,我想做类似这样的事情:

import contenttype
myobject = contenttype.__getobject__(classname)(param=value)

有没有什么类似于 getattribute 的东西可以在模块的顶层使用?

我知道可以用 exec() 来实现,但我想避免使用这个方法。

谢谢


编辑:

我找到了一种方法,但我不太确定这是否是个好主意。

import inspect 
myobject = dict(inspect.getmembers(contenttype))[classname](param=value)

1 个回答

7

模块其实就是一个对象,所以没错,你可以在模块上使用 __getattribute__

不过,你不应该直接调用 __getattribute__,因为这属于内部实现的细节。要访问对象上的命名属性,包括模块里的成员,应该使用 getattr()

getattr(contenttype, classname)(param= value)

撰写回答