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