В одном из моих проектов у меня странная проблема с jsonpickle
, пока я запускаю его из того же файла, он работает нормально, но если он запускается из другого класса, он меняет целевой объект на dict. Ниже приведена простая проблема реконструкции. Мои оригинальные классы немного сложны, но проблема та же.
PS Проблема "исчезает", когда в gui.py
я меняю import data
на from data import *
(с другим рефакторингом кода), но я не уверен почему ...
Простой пример:
- data.py - один работает отлично
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
gui .py (не работает)
import 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'