我有一个班级
class ActivationResult(object):
def __init__(self, successful : bool):
self._successful = successful
def getSuccessful(self) -> bool:
return self._successful
并进行测试
def testSuccessfulFromCreate(self):
target = ActivationResult(True)
self.assertEquals(target._successful, True)
self.assertEquals(target.getSuccessful, True)
第一个断言很好,但第二个断言失败了AssertionError: <bound method ActivationResult.getSuccess[84 chars]EB8>> != True
当我尝试打印时,同样的事情发生了。为什么呢?
答案 0 :(得分:1)
你得到的方法,而不是调用它。
试试:
self.assertEquals(target.getSuccessful(), True) # With parenthesss
第一次就行了,因为您获得的属性_successful
已使用True
正确初始化。
但是当你打电话给target.getSuccessful
时,给你方法对象本身,你似乎想要实现调用那个方法。
<强>解释强>
以下是打印对象方法时发生的相同事情的示例:
class Something(object):
def somefunction(arg1, arg2=False):
print "Hello SO!"
return 42
我们有一个班级,有一个方法 现在,如果我们打印它,但不打电话:
s = Something()
print s.somefunction # NO parentheses
>>> <bound method Something.somefunction of <__main__.Something object at 0x7fd27bb19110>>
我们获得与您的问题相同的输出<bound method ... at 0x...>
。这就是在打印时如何表示方法。
现在,如果我们打印并实际调用它:
s = Something()
print s.somefunction() # WITH parentheses
>>>Hello SO!
>>>42
调用该方法(打印Hello SO!
),并打印其返回值(42
)