Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中递归对象属性的创建_Python_Python 3.x - Fatal编程技术网

Python中递归对象属性的创建

Python中递归对象属性的创建,python,python-3.x,Python,Python 3.x,我希望对配置文件使用Python代码。这些配置文件是exec(ed)。基本上,我们的想法是这样定义配置: section_1 = { "username": "peter", "password": "paul" } from app.config.directive import g g.x.y.z = 1 g.f.g.h.i.j = {"a": b} g["x"]["y"]["z"] == 1 isinstance(g["f"]["g"]["h"]["i"]["j"],

我希望对配置文件使用Python代码。这些配置文件是exec(ed)。基本上,我们的想法是这样定义配置:

section_1 = {
    "username": "peter",
    "password": "paul"
}
from app.config.directive import g

g.x.y.z = 1
g.f.g.h.i.j = {"a": b}
g["x"]["y"]["z"] == 1
isinstance(g["f"]["g"]["h"]["i"]["j"], dict) == True
旁注:这不是关于Python代码作为配置文件的优缺点的讨论。我喜欢,尤其是马特奥的评论。所以这不是关于Python作为配置文件的问题

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

我希望向管理配置的开发人员/操作员提供的是能够在键/值分配中使用点符号的选项

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

x.y.z = 1
f.g.h.i.j = {"a": b}
变量xf未定义。我非常乐意在配置中提供一个全局对象(比如g),如下所示:

section_1 = {
    "username": "peter",
    "password": "paul"
}
from app.config.directive import g

g.x.y.z = 1
g.f.g.h.i.j = {"a": b}
g["x"]["y"]["z"] == 1
isinstance(g["f"]["g"]["h"]["i"]["j"], dict) == True
可以用Python实现吗?目标是通过如下方式访问定义的数据结构:

section_1 = {
    "username": "peter",
    "password": "paul"
}
from app.config.directive import g

g.x.y.z = 1
g.f.g.h.i.j = {"a": b}
g["x"]["y"]["z"] == 1
isinstance(g["f"]["g"]["h"]["i"]["j"], dict) == True
我确实知道,从Python的角度来看,这是一个坏主意。这当然不是蟒蛇式的。请记住:我希望使用Python进行配置管理,基本上是用一些特殊指令“扩展”Python


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

好的,好的,这很难看,但请让我知道它是否适合你!我想了想!已更新,修复了索引问题

类点(对象):
“”“dot.class”“”
定义初始化(自):
self.next=无
def _u获取项目(自身,密钥):
返回self.\uuuu dict\uuuu[key]
定义设置属性(自身、名称、值):
self.\uuuu dict\uuuu[name]=值
def _ugetattr _;(self,attr):
如果属性不在self中。\u dict\u
self.\uuuu dict\uuuu[attr]=dot()

返回self.\uuuu dict\uuuuu[attr]
可能重复的Not True,因为这是关于变量赋值的Not dict accessah ok。我想我可能知道一种方法,有一秒钟,类似这样的事情可能是相关的(搜索递归defaultdict):你成就了我的一天。我猜这是setattr和getattr之间的事情,但无法让它工作!谢谢,您将不得不稍微处理一下这一点,以便通过
g[“x”][“y”][“z”]
访问每个attr,如果我试图访问一个不在末尾的元素,我会点击递归深度。如果我下班后有时间,我可以回来试着把它修好。很乐意帮忙!通过尝试帮助解决溢出问题,真正享受学习语言的乐趣questions@M.Rau为您解决了这个问题,工作效率低下