【发布时间】:2012-03-01 20:55:35
【问题描述】:
我正在尝试在嵌套类中定义一个属性,然后稍后使用字符串或字符串列表访问它。这是我正在尝试做的代码
class MyNestedClass(object):
def __init__(self):
self.att1 = 5.
class MyClass(object):
def __init__(self):
self.my_nested_inst = MyNestedClass()
my_inst = MyClass()
我想更改my_inst.my_nested_inst.att1 的值,而我只有这样的列表:my_list = ['my_inst','my_nested_inst','att1']。
如果我使用这个:
vars(vars(vars()[my_list[0]])[my_list[1]])[my_list[2]]
这可行,但问题是我需要将它扩展到任意深度的嵌套实例。我想不出用 for 循环来完成这项工作的好方法。任何帮助是极大的赞赏。
另外,请注意,将字符串转换为全局命名空间中的变量名已得到很好的解决,但似乎没有一个答案适用于此。
EDIT1:我会尝试解释我为什么要这样做,如果我解释得不好,请告诉我。我正在使用 scipy.optimize.fmin,并且我只使用了 4 个参数进行优化。然而,我现在想扩展我的优化代码来处理任意数量的参数,其中一些是嵌套在类/实例层次结构中的几个层的属性。我希望能够在顶层创建一个列表或字典来告诉 fmin 如何解包参数数组以设置嵌套属性。
【问题讨论】:
-
你应该告诉我们你真正想要做什么,因为除非你在做一些非常深奥的编程,否则“字符串输入”几乎总是错误的,而且可能有一个更简单的方法方法。
-
参见 EDIT1。如果您能提出更好的方法来做到这一点,我将不胜感激。
-
有人对 EDIT1 有任何想法吗?
-
我写下了我的答案,因为我认为不可能做得更好。
-
啊,我也不喜欢字符串输入,所以我希望有更好的东西,但这似乎效果很好。
标签: python namespaces nested-attributes