Python实例化带字典字段的对象后打印该字段为空问题求助
问题排查与修复
问题根因
Node类的初始化逻辑存在错误:你在定义__init__方法时已经将gatewayIds设为入参,但给实例属性赋值时直接写死了self.gatewayIds={},没有将传入的参数值绑定到实例属性上,所以所有实例的gatewayIds字段最终都是空字典。
修复方案
将Node类__init__方法中的self.gatewayIds={}替换为self.gatewayIds = gatewayIds即可。
修正后完整代码
class Node(): def __init__(self,id, gatewayIds): self.id=id # 改为接收传入的gatewayIds参数 self.gatewayIds = gatewayIds class LevelNNode(Node): def __init__(self, id, gatewayIds): super(LevelNNode,self).__init__(id, gatewayIds) self.balance=0 totalLevels=2 Dn = 10 Gn = 2 NODES = [] GATEWAYIDS = [chr(x+97) for x in range(Gn)] if totalLevels==2: for i in GATEWAYIDS: # 创建所有网关 otherGatewayIds = GATEWAYIDS.copy() otherGatewayIds.remove(i) NODES.append(LevelNNode(i, {1:i})) deviceNodeId = 1 # 创建下层节点 for i in GATEWAYIDS: for j in range(Dn): NODES.append(Node(deviceNodeId, {1:i, 2:deviceNodeId})) deviceNodeId += 1 for x in NODES: print (x.id, x.gatewayIds)
效果说明
修改后运行代码,输出会符合你预期的格式:网关实例的gatewayIds为{1: 'a'}、{1: 'b'},下层节点的gatewayIds为{1: 'a', 2: 1}、{1: 'a', 2: 2}这类对应结构。
内容的提问来源于stack exchange,提问作者Riham ELSAADANY
相关产品推荐
相关产品推荐

