2015-11-16 37 views
0

我想要做的是使用python序列化一些类对象。但是,当我尝试迭代类对象的列表属性时,我得到一个str错误。我不清楚如何解决这个问题。我对Python非常陌生。遍历类对象的属性列表抛出python str错误

AttributeError: 'str' object has no attribute 'serialize'

这个函数里面的家庭类对象中出现的错误...

for member in self.members: 
    print member 
    data["members"].append(member.serialize()) # ERROR 

代码

import json 


# Functions 
# ------------------------------------------------------------------------------ 
def GetProperties(properties): 
    if properties == "Basic Properties": 
     return { 
      "Basic Properties" : [ 
       Property("isMale", False), 
       Property("isRelated", True), 
      ] 
     } 
    elif properties == "Extra Properties": 
     return { 
      "Extra Properties" : [ 
       Property("isTall", False), 
       Property("isAthletic", True), 
      ] 
     } 

# Classes 
# ------------------------------------------------------------------------------ 
class Property: 
    def __init__(self, key, value): 
     self.key = key 
     self.value = value 


class Person: 
    def __init__(self, name, attributes={}): 
     self.name = name 
     self.attributes = {} 

    def serialize(self): 
     data = { 
      "classname" : self.__class__.__name__, 
      "name" : self.name, 
      "attributes" : {}, 
     } 
     return data 


class Family: 
    def __init__(self, name, members=[], attributes={}): 
     self.name = name 
     self.members = members[:] 
     self.attributes = {} 

    def serialize(self): 
     data = { 
      "classname" : self.__class__.__name__, 
      "name" : self.name, 
      "attributes" : {}, 
      "members" : [], 
     } 

     for member in self.members: 
      print member 
      data["members"].append(member.serialize()) 

     return data 


# testing Serialization 
newPerson = Person("Joey") 
newPerson.attributes.update(GetProperties("Basic Properties")) 

newFamily = Family("Johnson's") 
newFamily.attributes.update(GetProperties("Basic Properties")) 
newFamily.members.append("newPerson") 

data = newFamily.serialize() 
json.dump(data, open("test.json",'w'), indent=4) 
+2

'newFamily.members.append(newPerson)'?你有一个字符串文字“newPerson”。 –

+0

帮助你是正确的。我愚蠢的错误 – JokerMartini

回答

1

尝试:

newFamily.members.append(newPerson) # newPerson as the object instantiated in preceding lines 

在你的原代码,您有:

newFamily.members.append("newPerson") # newPerson as a string literal 

所以,经过串,你试图序列串,而不是Person对象。