在我的一个项目中,jsonpickle有一个奇怪的问题,只要我从同一个文件运行它,它就能正常工作,但是如果它是从另一个类运行的,它就会将目标对象更改为dict。下面是简单的问题重建。我原来的课有点复杂,但问题是一样的。
在gui.py中,我将import data更改为from data import * (与其他代码重构一起),但我不知道为什么.
简单的例子:
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 fineimport data
class Gui:
def __init__(self):
self.myCompany = data.Company()
if __name__ == '__main__':
myGui = Gui() # Not working !第二个文件返回错误:
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'发布于 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 *时问题“消失”的原因。
https://stackoverflow.com/questions/61463240
复制相似问题