Python类和属性E

2024-03-29 09:14:51 发布

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

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

这就是我得到的错误。你知道吗

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'

代码

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()    

Tags: inpyselfforreturnmaindefline
2条回答

您需要将printTest函数更改为:

def printTest(classData):
    print classData.FirstName

classData不是CompKeyData实例的列表,而是单个CompKeyData实例。你知道吗

PEP8当然也值得一看python风格。你知道吗

当你这么做的时候

for i in ckClassData:

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

printTest(i)

它叫:

for f in classData:

其中classData是您传入的i。你知道吗

这将遍历单个CompKeyData实例,该实例(由于__iter__的实现)依次将FirstNameMiddleNameLastName分配给f——每个实例都是一个字符串,并且没有FirstName。你知道吗

相反,printTest应该是:

printTest(classData):
    print classData.FirstName

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

另外,值得一读PEP-0008;遵循这一点将使您的代码更具可读性。你知道吗

相关问题 更多 >