Python 为什么这个方法不返回一个值?

Python 为什么这个方法不返回一个值?,python,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 a

我有以下代码:

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'

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

sumit
是一个函数:你需要用括号调用它:
print(giventhing.sumit()/2)
sumit
是一个函数:你需要用括号调用它:
print(giventhing.sumit()/2)
这里有两个问题:

  • 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

这里有两个问题:

  • 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

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

因此,我们需要:

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
>>> 
>>A类:
定义初始化(self,a):
self.a=a
def输出(自我):
回归自我
>>>A
>>>a=a(1)
>>>出局
>>>a.out()
1.
>>> 

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

因此,我们需要:

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
>>> 
>>A类:
定义初始化(self,a):
self.a=a
def输出(自我):
回归自我
>>>A
>>>a=a(1)
>>>出局
>>>a.out()
1.
>>> 

您需要调用函数..作为旁注:您标记了这个
python-2.7
,但我很确定您使用的是python 3,而不是2.7。在Python2中,错误是抱怨使用了未绑定的instancemethod,而不是函数。@abarnert您完全正确,而且如果标记是
Python-2.7
,那么为什么要在
print
中使用括号?
Python-2
print对括号和无括号都有效。如果不使用括号,
python-3
会给出错误。@HamzaAnis是的,但是使用2.7中的参数会有点误导,除非您使用的是来自未来导入打印功能的
。其他阅读您的代码的人会认为它适用于Python 3,即使它不是。更不用说,在某个时候,您将编写
打印(x,y)
,然后惊奇地发现您得到了
('hello','world')
作为输出,而不是
hello world
。您需要调用该函数。。作为旁注:您标记了这个
python-2.7
,但我非常确定您使用的是python 3,而不是2.7。在Python2中,错误是抱怨使用了未绑定的instancemethod,而不是函数。@abarnert您完全正确,而且如果标记是
Python-2.7
,那么为什么要在
print
中使用括号?
Python-2
print对括号和无括号都有效。如果不使用括号,
python-3
会给出错误。@HamzaAnis是的,但是使用2.7中的参数会有点误导,除非您使用的是来自未来导入打印功能的
。其他阅读您的代码的人会认为它适用于Python 3,即使它不是。更不用说,在某个时刻,你将编写
打印(x,y)
,然后惊奇地发现你得到了
('hello','world')
作为输出,而不是
hello world
。Doh,它必须是这样的。你还想做
giventhing=Thing()
来实例化
Thing
Doh的一个实例,它必须是这样的。您还需要执行
giventhing=Thing()
来实例化
Thing