Python初学者-where comes<bound method。。。的<。。。对象位于0x0000000005EAAEB8>>from?

2024-06-28 23:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一节课

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

同样的事情发生了,当我试图打印它。为什么?


Tags: selftruetargetreturnobjectinitdef断言
1条回答
网友
1楼 · 发布于 2024-06-28 23:51:30

你得到的是方法,而不是调用它。
尝试:

self.assertEquals(target.getSuccessful(), True)  # With parenthesss

第一次就可以了,因为您得到了属性_successful,它是用True正确初始化的。
但是当你调用target.getSuccessful时,它会给你一个method对象本身,你似乎想实际调用那个方法。


说明

下面是打印对象方法时发生的相同情况的示例:

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>>

我们得到的输出与你的文章相同。这就是方法在打印时的表示方式。

现在,如果我们打印并实际调用它:

s = Something()
print s.somefunction()  # WITH parentheses
>>>Hello SO!
>>>42

方法被调用(它打印Hello SO!),它的返回也被打印(42

相关问题 更多 >