Python Beginner - where comes <bound method … of <… object at 0x0000000005EAAEB8>> from?
我有一节课
1 2 3 4 5 6 7 | class ActivationResult(object): def __init__(self, successful : bool): self._successful = successful def getSuccessful(self) -> bool: return self._successful |
和一个测试
1 2 3 4 5 6 | def testSuccessfulFromCreate(self): target = ActivationResult(True) self.assertEquals(target._successful, True) self.assertEquals(target.getSuccessful, True) |
第一个断言是好的,但第二个断言与
同样的事情也会发生,当我试图打印它的时候。为什么?
您得到的是方法,而不是调用它。尝试:
1 | self.assertEquals(target.getSuccessful(), True) # With parenthesss |
第一次没问题,因为您得到了属性
解释
以下是打印对象方法时发生的相同情况的示例:
1 2 3 4 | class Something(object): def somefunction(arg1, arg2=False): print"Hello SO!" return 42 |
我们有一个类,有一个方法。现在,如果我们打印它,但不调用它:
1 2 3 | s = Something() print s.somefunction # NO parentheses >>> <bound method Something.somefunction of <__main__.Something object at 0x7fd27bb19110>> |
我们得到的输出与您的问题相同。这就是方法在打印自身时的表示方式。
现在,如果我们把它打印出来并称之为:
1 2 3 4 | s = Something() print s.somefunction() # WITH parentheses >>>Hello SO! >>>42 |
方法被调用(它打印