Python 初学者 - <bound method ... of <... object at 0x0000000005EAAEB8>> 来自哪里?
Python Beginner - where comes <bound method ... of <... object at 0x0000000005EAAEB8>> from?
我有一个class
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
当我尝试打印时,同样的事情发生了。为什么?
您正在获取方法,而不是调用它。
尝试:
self.assertEquals(target.getSuccessful(), True) # With parenthesss
第一次没问题,因为你得到了 _successful
属性,它是用 True
正确初始化的。
但是当你调用 target.getSuccessful
它 给你 方法对象 本身 ,你似乎想要实际 调用那个方法。
说明
这是打印对象方法时发生的相同事情的示例:
class Something(object):
def somefunction(arg1, arg2=False):
print("Hello SO!")
return 42
我们有一个class,有一个方法。
现在,如果我们打印它,但 不调用 它:
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!
),它的return也被打印(42
)
我有一个class
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
当我尝试打印时,同样的事情发生了。为什么?
您正在获取方法,而不是调用它。
尝试:
self.assertEquals(target.getSuccessful(), True) # With parenthesss
第一次没问题,因为你得到了 _successful
属性,它是用 True
正确初始化的。
但是当你调用 target.getSuccessful
它 给你 方法对象 本身 ,你似乎想要实际 调用那个方法。
说明
这是打印对象方法时发生的相同事情的示例:
class Something(object):
def somefunction(arg1, arg2=False):
print("Hello SO!")
return 42
我们有一个class,有一个方法。
现在,如果我们打印它,但 不调用 它:
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!
),它的return也被打印(42
)