繁体   English   中英

TypeError:“ str”对象在OOP中不可调用…

[英]TypeError: 'str' object is not callable … in OOP

因此,我只是在学习如何在一个调用中集成两个类,然后不断在print语句中收到错误:TypeError:'str'对象不可调用。 我需要创建一个str构造器吗? 还是我需要将两个类整合为一个类?

class Election:

    def __init__(self, place, ballot):
        self.place=place
        self.ballot=ballot

    def place(self):
        return self.place

    def getBallot(self):
        return self.ballot

    def getContest(self,number):
        if self.ballot[number]:
            return self.ballot[number]
        else:
            return False

    def size(self):
        return len(self.ballot)

    def addContest(self,Contest):
        self.ballot=self.ballot.append(Contest)
        return self.ballot.get(Contest)

class Contest:

    def __init__(self, position, cands):
        self.position = position
        self.cands = {"Jones":0,"Smith":0}

    def getPosition(self):
        return str(self.position)

    def getCandidates(self):
        return str(self.cands)

    def getTally(self,candidate):
        return self.cands[candidate]

    def addTally(self,candidate,n_votes):
        self.cands[candidate]=self.cands[candidate]+n_votes
def main():
    elect = Election('TestTown', [
        Contest('Senator', ['Jones', 'Smith']),
        Contest('Mayor', ['Anderson', 'Green'])])

    print(elect.place())
    elect.getContest(1)# --> <Election object at 0x7f4b359cf5d0>
    elect.getContest(1).getTally('Anderson')# --> 0

main()

该错误确切告诉您问题出在elect.placeelect.place是一个字符串,并且您试图通过添加()来调用它。 elect.place是字符串'TestTown' 简单地称其为正常。 不要这样 它不是函数或其他可调用的。

print(elect.place)

您可以摆脱吸气剂,例如def placedef getBallotdef getPosition等等。 实例变量已经可以直接访问。

问题是这两行代码:

def place(self):
    return self.place

瞧,现在您的Election对象将self.place作为字符串和函数。 在这种情况下,似乎字符串遮盖了函数。 要解决此问题,请遵循与其他类函数相同的约定,并将函数命名为getPlace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM