1

所以我正在将一些代码从 IDL 转换为 python。在 IDL 中,一个结构的结构中包含大约 50 个变量;

values = { struct1: {a = 1, b = 2}, struct2: {a = 3, b = 4} ... etc }

可以通过以下方式访问数据:

print, values.struct1.a
# 1

在 python 中是否有一种简单的方法可以做到这一点,我仍然可以在类值中具有作用于内部类的方法?例如,有一个 setValues 方法可以更改 struct1 或 struct2 中的值吗?我希望有这样的事情:

class values:
    def __init__(self):
         self.struct1 = self.struct1()
         self.struct2 = self.struct2()

    class struct1:
         def __init__(self):
             self.a = 1
             self.b = 2
    class struct2: 
         def __init__(self):
             self.c = 3
             self.d = 4

    def setValues(self, **kwargs):
        for key,value in kwargs.items():
             setattr(self, key, value)
        return

我可以在哪里执行以下代码:

st = values()
st.setValue(struct1.a = 2.0, struct2.a = 5.0)
print, st.struct1.a , st.struct2.a
# 2.0
# 5.0

但我收到以下错误:

AttributeError: values instance has no attribute 'struct1'

我对 python 很陌生,并且很好奇是否有人对生成嵌套类的更好方法有一些见解,并且有可以作用于所有嵌套的方法。

4

1 回答 1

0

有代码:

class values:

    class struct1:
         def __init__(self):
             self.a = 1
             self.b = 2

    class struct2: 
         def __init__(self):
             self.c = 3
             self.d = 4

    def __init__(self):
         self.struct1 = self.struct1()
         self.struct2 = self.struct2()

    def setValue(self, **kwargs):
        for key, value in kwargs.items():
            try:
                getattr(self.struct1, key)
            except AttributeError:
                # self.struct1 don't have any attribute which name is the value of 'key'.
                pass
            else:
                setattr(self.struct1, key, value)

            try:
                getattr(self.struct2, key)
            except AttributeError:
                # self.struct2 don't have any attribute which name is the value of 'key'.
                pass
            else:
                setattr(self.struct2, key, value)

你可以:

>>> st = values()
>>> st.struct1.a = 10
>>> st.struct2.c = 20
>>> print(st.struct1.a)
>>> 10
>>> print(st.struct2.c)
>>> 20
>>> st.setValue(b=20, a=100, d=50, c=60)
>>> print(st.struct1.a)
>>> print(st.struct1.b)
>>> print(st.struct2.c)
>>> print(st.struct2.d)
>>> 100
>>> 20
>>> 60
>>> 50

编辑:在你原来的问题中,你__init__init__

self.struct1 = self.struct1()
self.struct1 = self.struct2()   # Here you was redefining self.struct1

我改为:

self.struct1 = self.struct1()
self.struct2 = self.struct2()
于 2014-04-16T17:16:03.877 回答