为什么此方法不返回值?

时间:2018-08-19 02:21:15

标签: python

我有以下代码:

class Thing:
    def __init__(self):
        self.a = 30
        self.b = 10
    def sumit(self):
        return self.a + self.b

giventhing = Thing
print(giventhing.sumit/2)

我收到此错误:

TypeError: unsupported operand type(s) for /: 'function and 'int'

我不知道为什么会这样做,并且无法通过搜索找到答案。有人知道这是什么意思吗?

3 个答案:

答案 0 :(得分:5)

这里有两个问题:

  • sumit是一个实例方法,因此您需要在实例而不是类(或类型)上调用它。
  • 要执行诸如方法之类的可调用对象,您需要使用propert语法,即method()在末尾注意()

执行giventhing = Thing不会给您实例,它会为您提供对类/类型本身的引用,仅在您要使用类成员进行操作时才有用,这不是您的用例。

执行giventhing.sumit / 2不会将sumit的结果除以2。实际上,giventhing.sumit会产生对函数本身的引用,而不是对函数结果的引用。您需要调用该函数以获取其返回值,即sumit()

固定代码:

giventhing = Thing()          # You need an instance of Thing
print(giventhing.sumit() / 2) # You need to actually call sumit on the instance

答案 1 :(得分:1)

sumit是一个函数:您需要用方括号将其调用:print(giventhing.sumit()/2)

答案 2 :(得分:0)

函数是您首先需要调用的函数类型

所以需要:

giventhing = Thing()
print(giventhing.sumit()/2)

因此完全需要括号

这是一个例子:

>>> class A:
    def __init__(self,a):
        self.a=a
    def out(self):
        return self.a

>>> A
<class '__main__.A'>
>>> a=A(1)
>>> a.out
<bound method A.out of <__main__.A object at 0x0000005F9D177EB8>>
>>> a.out()
1
>>>