模块的setattr()在Python中应该如何使用?

4 投票
1 回答
1837 浏览
提问于 2025-04-15 23:28

在一个类的方法里,我可以使用内置的函数来添加属性:

setattr(self, "var_name", value).  

如果我想在一个模块里做同样的事情,我可以这样做:

globals()["var_name"] = value

这样做是最好的方法吗?还是有更符合Python风格的解决方案呢?

1 个回答

6

你建议的方法

globals()["var_name"] = value

确实是最符合Python风格的做法。特别是,它比使用eval要更符合Python的风格,而使用eval是你主要(但不是唯一)的替代选择。

不过,如果你还是想用setattr,可以通过sys.modules来获取当前模块对象的引用,方法是使用当前模块的__name__变量(这里有详细说明),具体做法如下:

import sys
setattr(sys.modules[__name__], "var_name", value)

撰写回答