首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python类和属性错误

Python类和属性错误
EN

Stack Overflow用户
提问于 2014-03-11 14:22:33
回答 2查看 92关注 0票数 0

请看下面的代码和我得到的属性错误。谢谢你的帮助。

这就是我所犯的错误。

代码语言:javascript
复制
Traceback (most recent call last):
    File "ClassError.py", line 45, in <module>
    if __name__ == '__main__':Main()
File "ClassError.py", line 43, in Main
    printTest(i)
File "ClassError.py", line 38, in printTest
    print f.FirstName
AttributeError: 'str' object has no attribute 'FirstName'

代码

代码语言:javascript
复制
class CompKeyData():
    def __init__(self,
        FirstName,\
        MiddleName,\
        LastName):
        self.FirstName  = FirstName
        self.MiddleName = MiddleName
        self.LastName   = LastName

    def __repr__(self):
        return repr((self.FirstName,\
                     self.MiddleName,\
                     self.LastName))

    def __iter__(self): 
        return iter((self.FirstName,\
                     self.MiddleName,\
                     self.LastName))

def ckDataClassList(dataList):
    dataObjects = []
    for FirstName,\
        MiddleName,\
        LastName in dataList:
        dataObjects.append(CompKeyData(
            FirstName,\
            MiddleName,\
            LastName))
    return dataObjects

ckData = [['John', 'Ralph', 'DuMont'], ['Jack', 'Lowry', 'Matern']] 

ckClassData = ckDataClassList(ckData)


def printTest(classData):
    for f in classData:
    print f.FirstName
return None

def Main():
    for i in ckClassData:
    printTest(i)

if __name__ == '__main__':Main()    
EN

Stack Overflow用户

回答已采纳

发布于 2014-03-11 14:30:00

当你做的时候

代码语言:javascript
复制
for i in ckClassData:

每个i都是一个CompKeyData实例。然后你就会:

代码语言:javascript
复制
printTest(i)

这就要求:

代码语言:javascript
复制
for f in classData:

其中classData是您传入的i

这将遍历单个CompKeyData实例,该实例(由于__iter__的实现)依次将FirstNameMiddleNameLastName分配给f- -每个实例都是一个字符串,没有FirstName

相反,printTest应该是:

代码语言:javascript
复制
printTest(classData):
    print classData.FirstName

您不需要显式return None,如果不显式return其他任何内容,则会自动发生这种情况。

此外,它值得阅读佩普-0008;遵循这将使您的代码更具可读性。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22328553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档