【发布时间】:2021-09-30 15:10:11
【问题描述】:
有没有办法在 Python 中拥有类似于属性但在类之外的东西?
可能是重复的,但我没有找到正确的答案。
这是一个解决的例子:
config = {'a':1}
config_a = some_function(config, 'a')
config_a # eval as 1
config['a'] = 2
config_a # eval as 2
使用类和属性,这很容易,但请注意,我必须在类外使用“a”。
Can modules have properties the same way that objects can?没有解决问题,因为涉及模块,没有解决上述问题。
更多上下文
我有一个 Flask 应用程序,它需要使用非 Flask 插件。 因此我有 2 个单独的配置对象:
- 烧瓶:app.config (dict)
- 扩展名:ext(对象,不是字典)
应用程序使用 app.config 加载通用配置和其他扩展配置。我想知道是否有一种简单的方法(不涉及猴子补丁)让 ext.config 值指向 app.config 值,所以我只需要处理一个配置文件。
# extension.py
class Extension()
def __init__(self):
self.a = "value_1"
# fix.py to use extension flask way
class MyExtension()
def init_app(self, app):
app.ext = Extension()
app.config.setdefault('a', default_a)
app.ext.a = some_function(app.config, 'a')
请注意,在上面的示例中,我无权访问 extension.py 将“a”更改为属性。
我可以使用猴子补丁将“a”转换为属性,但可能有更简单的方法。
【问题讨论】:
-
为什么不直接使用
dict呢?代码中的config的行为完全类似于dict。 -
Flask 使用一个 app.config,它是一个字典。但是,有一些不是“flask”的插件有自己的 config2。我希望 config2 指向 config1 中的值,所以我只需要担心 1 个配置字典。
-
您尝试做的事情不应该做。以不同的方式解决您的问题。从您的描述中,我不太了解您的真正问题是什么,所以恐怕我无法提供任何建议-但是即使可能,对全局变量做一些黑魔法在道德上也是错误的,您可能会来世为此受到惩罚。
-
这读起来就像你本质上想在 Python 中实现指针,这是在讨论 here
-
很高兴知道这是不可能的。然后我会用你的评论信息回答我自己的问题。 @kaya3 感谢 eafterlife 的建议。
标签: python