迭代类对象的属性列表会抛出python

2024-10-04 01:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是使用python序列化一些类对象。但是,当我尝试迭代类对象的list属性时,我得到一个str错误。我不清楚怎么解决这个问题。我对Python还比较陌生。你知道吗

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

此错误发生在此函数内的Family类对象中。。。你知道吗

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)

Tags: 对象nameselfdatareturnbasicdefproperty