我有一堂课
class ActivationResult(object):
def __init__(self, successful : bool):
self._successful = successful
def getSuccessful(self) -> bool:
return self._successful
Run Code Online (Sandbox Code Playgroud)
还有一个测试
def testSuccessfulFromCreate(self):
target = ActivationResult(True)
self.assertEquals(target._successful, True)
self.assertEquals(target.getSuccessful, True)
Run Code Online (Sandbox Code Playgroud)
第一个断言很好,但第二个断言失败 AssertionError: <bound method ActivationResult.getSuccess[84 chars]EB8>> != True
当我尝试打印它时,也会发生同样的事情。为什么?
您正在获取方法,而不是调用它。
尝试 :
self.assertEquals(target.getSuccessful(), True) # With parenthesss
Run Code Online (Sandbox Code Playgroud)
第一次没问题,因为您获得了属性_successful,该属性已正确初始化为True。
但是当您调用target.getSuccessful它时,它会为您提供方法对象本身,您似乎想要实际调用该方法。
解释
这是打印对象方法时发生的相同事情的示例:
class Something(object):
def somefunction(arg1, arg2=False):
print("Hello SO!")
return 42
Run Code Online (Sandbox Code Playgroud)
我们有一个类,有一个方法。
现在,如果我们打印它,但不调用它:
s = Something()
print(s.somefunction) # NO parentheses
>>> <bound method Something.somefunction of <__main__.Something object at 0x7fd27bb19110>>
Run Code Online (Sandbox Code Playgroud)
我们得到相同的输出 <bound method ... at 0x...>您的问题。这就是方法在打印时的表示方式。
现在,如果我们打印它并实际调用它:
s = Something()
print(s.somefunction()) # WITH parentheses
>>>Hello SO!
>>>42
Run Code Online (Sandbox Code Playgroud)
方法被调用(它打印Hello SO!),它的返回也被打印(42)