AttributeError:'dict'对象没有属性'charss'

时间:2018-03-23 12:12:18

标签: python list class dictionary

我是使用python进行OOP的新手。我有3个类,其中一个作为参数实例从另一个调用:

class Characters:
    def __init__(self, b="", c = ""):
        self.b= b
        self.c= c           

class Words:
    def __init__(self, charss=Characters()):       
        self.charss= charss

class Sentences:
    def __init__(self, w=Words()):
        self.w = w

然后我在另一个类中创建一个新的类Words实例,并用json文件中的数据填充它。

s = Sentences()
s.__dict__ = json.loads(output.content)

调试时,我可以看到s已正确填充。然后我尝试打印s这样的值:

print(s.w[0].charss[0])

发生错误:AttributeError: 'dict' object has no attribute 'charss'

是因为我从JSON填充__dict__,其中charss实例化为list。如果是这样,那么将__dict__json输入更改为__dict__或将对象实例化为from pyspark.sql.functions import udf, struct @udf("array<string>") def as_basket(row): return [k for k, v in row.asDict().items() if v] df.withColumn("basket", as_basket(struct(*df.columns[1:]))).show() 的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:1)

问题在于访问实例s进行打印的方式。我将json输出保存为字典,但默认情况下,类的实例是一个列表。因此,而不是

print(s.w[0].charss[0])

该行应为

print(s.w[0]["charss"][0])

答案 1 :(得分:0)

当您说s.__dict__ = some_dictionary时,您完全将s的所有实例变量替换为some_dictionary中的变量。这包括w,现在完全由JSON中的任何内容定义。 JSON对象永远不会具有charss属性,因此保证以您提及的方式失败。

你想用s.__dict__ = json.loads(output.content)做什么?您只想将字典存储在s中吗?如果是这样,s.my_cool_dict_name = json.loads(output.content)可能就是您想要的。