2015-11-16 73 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對象。