如何通过__getattribute__从Python模块获取类或对象?
我有一个这样的字符串:
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)