首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类中的Jsonpickle更改数据类型。

子类中的Jsonpickle更改数据类型。
EN

Stack Overflow用户
提问于 2020-04-27 16:09:32
回答 1查看 279关注 0票数 0

在我的一个项目中,jsonpickle有一个奇怪的问题,只要我从同一个文件运行它,它就能正常工作,但是如果它是从另一个类运行的,它就会将目标对象更改为dict。下面是简单的问题重建。我原来的课有点复杂,但问题是一样的。

gui.py中,我将import data更改为from data import * (与其他代码重构一起),但我不知道为什么.

简单的例子:

  1. data.py -单独工作很好
代码语言:javascript
复制
import jsonpickle
from dataclasses import dataclass, field
from typing import List

@dataclass
class Car:
    name: str
    model: str

class CarsList(List):
    # some other non important functions

    def length(self):
        return len(self)

class Company:

    def __init__(self):
        self.companyCars = CarsList()
        self.loadData()
        print(self.companyCars.length())

    def loadData(self):
        with open('cars.json', "r") as infile:
            json_str = infile.read()
        self.companyCars = jsonpickle.decode(json_str)

if __name__ == '__main__':
    myCompany = Company()  # works fine
  1. gui.py (不工作)
代码语言:javascript
复制
import data
class Gui:
    def __init__(self):
        self.myCompany = data.Company()

if __name__ == '__main__':
    myGui = Gui()  # Not working !

第二个文件返回错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/bart/costam/gui.py", line 15, in <module>
    myGui = Gui()  # Not working !
  File "/home/bart/costam/gui.py", line 11, in __init__
    self.myCompany = data.Company()
  File "/home/bart/costam/data.py", line 40, in __init__
    print(self.companyCars.length())
AttributeError: 'dict' object has no attribute 'length'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 16:22:04

这个类是全局不可用的,所以jsonpickle无法对它进行解码。

文档The object must be accessible globally via a module and must inherit from object (AKA new-style classes).

这也是为什么当您执行from data import *时问题“消失”的原因。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61463240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档