我有一个xml文件,我使用xmltodict转换为ordereddict。我已经创建了一个类来包含xml文件的某些部分,其中一些顶级类具有子对象的属性,或者如果它们重复,有时是一个子对象列表。对于每个类,我都添加了一个@classmethod from_dict
,它返回自身,输入是一个odict。对于每个类,如果有一个基本的(int,str,etc)attribute(xml标记名)我只是通过执行以下操作来检索值:cls.tag = input_dict.get('tag')
。这些值是可检索的,并且是正确的,但是对于类列表,我做了如下操作:
@dataclass()
class ContainerClass:
windows: List[Window]
title: str
...
@classmethod
def from_dict(cls: 'ContainerClass', input_dict: OrderedDict) -> 'ContainerClass':
instance = cls
instance.title = input_dict.get('title', '')
temp_list = []
windows_list = input_dict.get('windows', []) *returns list of odict objects (Windows once parsed)*
for i in range(0, len(windows_list)):
temp_list.append(Windows.from_dict(windows_list[i]))
print(f"Window name: '{temp_list[i].name}'")
*The above print statement will print out the name of all windows (10 windows)*
instance.windows = temp_list
for window in instance.windows:
print(f"Window name: '{window.name}'")
*The above print statement will print out the name of the last window 10 times*
return instance
字符串
所以我遇到了一个问题,当我从Window类from_dict中获取窗口时,有正确的名称,但是在将列表分配给cls之后,最后一个窗口只是重复窗口的总数。
我试着把列表属性保存为一个通用列表,也保存为一个Windows类型的列表。Windows只是这里的一个例子,因为有很多层次的嵌套列表。
1条答案
按热度按时间8ehkhllq1#
您并不是在为类方法返回创建类的示例。
字符串
确保
Windows.from_dict
实际上也返回Windows
的一个 instance。