python 覆盖类列表的问题

46qrfjad  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(94)

我有一个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只是这里的一个例子,因为有很多层次的嵌套列表。

8ehkhllq

8ehkhllq1#

您并不是在为类方法返回创建类的示例。

@dataclass()
class ContainerClass:
    windows: List[Window]
    title: str
    ...

    @classmethod
    def from_dict(cls: 'ContainerClass', input_dict: OrderedDict) -> 'ContainerClass':
        title = input_dict.get('title', '')
        windows_list = [Windows.from_dict(w) for w in input_dict.get('windows', [])]

        return cls(title, windows_list)

字符串
确保Windows.from_dict实际上也返回Windows的一个 instance

相关问题