gpt4 book ai didi

python - Python 中的递归对象属性创建

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:36 26 4
gpt4 key购买 nike

我希望将 Python 代码用于配置文件。这些配置文件是 exec(ed)。所以基本上这个想法是像这样定义配置:

section_1 = {
"username": "peter",
"password": "paul"
}

旁注:这不是关于将 Python 代码作为配置文件的优缺点的讨论。我喜欢existing discussion尤其是Matteo 的评论。所以这与将 Python 作为配置文件无关。

如果您愿意,我想“滥用”Python 进行配置。我喜欢并且需要分层数据结构。

我希望为管理配置的开发人员/操作人员提供的是能够选择在键/值分配中使用点表示法。

所以我的问题是:是否有可能(如果是,那么如何)实现以下功能?

x.y.z = 1
f.g.h.i.j = {"a": b}

变量xf 未定义。我非常乐意在这样的配置中提供一个全局对象(例如 g):

from app.config.directive import g

g.x.y.z = 1
g.f.g.h.i.j = {"a": b}

可以用 Python 实现吗?目标是使用如下内容访问定义的数据结构:

g["x"]["y"]["z"] == 1
isinstance(g["f"]["g"]["h"]["i"]["j"], dict) == True

我知道从 Python 的角度来看这是个坏主意。这当然不是pythonic。请记住:我希望使用 Python 进行配置管理,并基本上使用一些特殊指令“扩展”Python。

希望你明白我的意思。提前致谢。

最佳答案

好吧,好吧,这很丑陋,但让我知道它是否适合你!花了我一些思考!更新并修复了索引问题。

class dot(object):
"""dot.notation god class"""
def __init__(self):
self.next=None
def __getitem__(self, key):
return self.__dict__[key]
def __setattr__(self, name, value):
self.__dict__[name] = value
def __getattr__(self, attr):
if attr not in self.__dict__:
self.__dict__[attr] = dot()
return self.__dict__[attr]

>>> x=dot()
>>> x.g.h.j=3
>>> x['g']
<__main__.dot object at 0x1023f6cd0>
>>> x['g']['h']['j']
3

所以...它将通过 set dunder 方法隐性地创建自己的实例。 x.x.x.x.y 中的每个 x 都是 dot 类型,y 是唯一有值的东西。

关于python - Python 中的递归对象属性创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com