use*_*348 1 python split for-loop nested
I\xe2\x80\x99m 编写一个函数,该函数接受父对象data
和一个字符串inputString
,该字符串可能包含也可能不包含点符号来表示嵌套对象(即 \xe2\x80\x98nestedObject.itemA)。该函数应将inputString
的属性设置data
为随机字符串。如果字符串inputString
是嵌套对象,则该函数应将nested object\xe2\x80\x99s 值设置为随机字符串。我可以\xe2\x80\x99t弄清楚如何在for循环中处理这一切。我想做这样的事情:
split_objects = value.split(\xe2\x80\x9c.\xe2\x80\x9d)\nfor item in split_objects:\n data.__setattr__(item, get_random_string())\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,对于嵌套对象,上面的代码会将嵌套对象设置为随机字符串,而不是内部的字段。有人可以帮助我处理这两种情况的语法吗?预先感谢\xe2\x80\xa6
\n您需要先获得 的引用,data.nestedObject
然后才能使用setattr
进行更改data.nestedObject.itemA
。
prefix, suffix = value.rsplit(".",1)
# now prefix is nestedOjbect and suffix is itemA
ref = getattr(data,prefix)
setattr(ref,suffix,get_random_string())
Run Code Online (Sandbox Code Playgroud)
您需要获取参考的次数与 中的点一样多inputString
。所以,如果你有一个任意深度嵌套的结构data
value = "nestedObject.nestedObject2.nestedObject3.itemA"
path, attribute = value.rsplit(".",1)
path = path.split(".")
ref = data
while path:
element, path = path[0], path[1:]
ref = getattr(ref, element)
setattr(ref, attribute, get_random_string())
Run Code Online (Sandbox Code Playgroud)