我是python新手,需要帮助解决以下问题
我必须创建名为Error的python对象,然后以json格式打印它: 下面是指向对象结构图像的链接 enter image description here
数据类
class Data:
def __init__(self,fileName:str, rowId:int, rowData:str):
self.fileName = fileName
self.rowId= rowId
self.rowData = rowData
def get_fileName(self):
return self.fileName
def set_fileName(self, fileName):
self.fileName = fileName
def get_rowId(self):
return self.rowId
def set_rowId(self, rowId):
self.rowId = rowId
def get_rowData(self):
return self.rowData
def set_rowData(self, rowData):
self.rowData = rowData
错误类别:
from Process import Process
from RootCause import RootCause
import json
class Errors(object):
def __init__(self, process,rootCause):
self.process= process
self.rootCause= rootCause
def get_process(self):
return self.process
def set_process(self, process):
self.process = process
def get_rootCause(self):
return self.rootCause
def set_rootCause(self, rootCause):
self.rootCause = rootCause
def __str__(self):
return (json.dumps(self.process.get_flow))
进程类--
class Process:
def __init__(self, id:str,flow:str,flowSubType:str):
self.id= id
self.flow= flow
self.flowSubType= flowSubType
def get_id(self):
return self.id
def set_id(self, id):
self.id = id
def get_flow(self):
return self.flow
def set_flow(self, flow):
self.flow = flow
def get_flowSubType(self):
return self.flowSubType
def set_flowSubType(self, flowSubType):
self.flowSubType = flowSubType
根本原因类--
class RootCause:
def __init__(self,system:str, code:str,message:str,timeStamp:str):
self.system= system
self.code= code
self.message= message
self.timeStamp= timeStamp
def get_system(self):
return self.system
def set_system(self, system):
self.system = system
def get_code(self):
return self.code
def set_code(self, code):
self.code = code
def get_message(self):
return self.message
def set_message(self, message):
self.message = message
def get_timeStamp(self):
return self.timeStamp
def set_timeStamp(self, timeStamp):
self.timeStamp = timeStamp
错误类别:
from Data import Data
from Errors import Errors
from Process import Process
from RootCause import RootCause
from typing import List
import json
class Error(object):
def __init__(self,data,errors : List[Errors]):
self.data= data
self.errors= errors
def get_data(self):
return self.data
def set_data(self, data):
self.data=data
def get_errors(self):
return self.errors
def set_errors(self, errors):
self.errors = errors
def test():
data = Data('a',2,'b')
process = Process('id','flow','subtype')
rootCause = RootCause('sys','co','message','timestamp')
errors = [process, rootCause]
error = Error(data,errors)
json_data = json.dumps(error, default=lambda o: o.__dict__)
print(json_data)
test()
执行错误类后,我得到如下输出:
{
"data":
{
"fileName": "a",
"rowId": 2,
"rowData": "b"
},
"errors": [
{
"id": "id",
"flow": "flow",
"flowSubType": "subtype"
},
{
"system": "sys",
"code": "co",
"message": "message",
"timeStamp": "timesta"
}
]
}
但我需要打印输出的帮助,如下所示:
{
"data": {
"fileName": "a",
"rowId": 2,
"rowData": "b"
},
"errors": [
{
"Process": {
"id": "id",
"flow": "flow",
"flowSubType": "subtype"
},
"error": {
"system": "sys",
"code": "co",
"message": "message",
"timeStamp": "timestamp"
}
}
]
}
有人能帮我解决这个问题吗
有两种方法可以获得所需的输出
方法1:将错误存储在字典而不是列表中:
方法2(推荐),编写一个适当的asdict()函数(在有意义的地方,使用Python数据模型是一个很好的实践,但是
__dict__
dunder有点挑剔,应该只用于检查对象,而不用于获取业务案例格式的对象表示您可以将其称为:
关于我评论中的另外一两点:
在Python中,我们可以像obj.attr一样直接访问对象属性。
不需要getter和setter。
如果您不希望有人访问变量,请在前面加一个下划线。例如self.\u data这实际上不起任何作用,但按照惯例,Python编码人员知道不要使用下划线实例变量,否则会承担后果。因此,这就像软策略“私有”变量一样。
如果接下来您需要一个实际执行某些操作的getter(例如,在返回之前从公制转换为英制),则很容易将其添加到属性装饰器中。
相关问题 更多 >
编程相关推荐