【问题标题】:TypeError: 'str' object is not callable ... in OOPTypeError:'str'对象不可调用......在OOP中
【发布时间】:2015-11-30 07:02:25
【问题描述】:

所以我只是在学习如何在一次调用中集成两个类,但我一直在打印语句上收到错误:TypeError: 'str' object is not callable。我需要创建一个 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()

【问题讨论】:

    标签: python class oop


    【解决方案1】:

    错误告诉你问题出在哪里:elect.place 是一个字符串,你试图通过添加() 来调用它。 elect.place 是字符串 'TestTown'。只需将其称为正常。不要叫它。它不是函数或其他可调用对象。

    print(elect.place)
    

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

    【讨论】:

      【解决方案2】:

      问题出在这两行代码:

      def place(self):
          return self.place
      

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

      【讨论】:

        猜你喜欢
        • 2015-03-07
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多