OOP / Python TypeError:'float'对象不可调用

时间:2017-09-07 19:33:47

标签: python python-2.7 oop

我收到一个TypeError:'float'对象在我的Python代码中无法调用?我错过了什么?我已经摆弄它并且没有找到解决方案。我也浏览过关于它的不同帖子并且没有找到解决方案。至少没有一个我认识或理解的。

class MathDojo(object):

    def __init__(self, *args):
        self.results = 0

    def add(self, *args):
        for i in args:
            if type(i) == list or type(i) == tuple:
                for v in i:
                    self.results += v
            else:
                self.results += i
        return self

    def subtract(self,*args):
        for i in args:
            if type(i) == list or type(i) == tuple:
                for v in i:
                    self.results -= v
            else:
                self.results -= i
        return self

    def results(self):
        print self.results
        return self

md = MathDojo()
md.add([1], 3,4).add([3,5,7,8], [2,4.3,1.25]).subtract(2, [2,3], [1.1,2.3]).results()

1 个答案:

答案 0 :(得分:1)

您在results中创建了一个属性__init__,后来的方法命名为尝试调用该属性的相同内容。重命名下面的一个或另一个,我使用下划线来表示属性。

此外:

  • 您不需要*args
  • 中的__init__
  • 使用if isinstance(i, (list, tuple))检查多种类型

代码:

class MathDojo(object):

    def __init__(self):
        self._results = 0

    def add(self, *args):
        for i in args:
            if if isinstance(i, (list, tuple)):
                for v in i:
                    self._results += v
            else:
                self._results += i
        return self

    def subtract(self,*args):
        for i in args:
            if if isinstance(i, (list, tuple)):
                for v in i:
                    self._results -= v
            else:
                self._results -= i
        return self

    def results(self):
        print(self._results)
        return self

md = MathDojo()
md.add([1], 3,4).add([3,5,7,8], [2,4.3,1.25]).subtract(2, [2,3], [1.1,2.3]).results()
28.149999999999995