Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python初学者-何处来<;绑定方法。。。属于<;。。。对象位于0x0000000005EAAEB8>&燃气轮机;从…起_Python_Properties - Fatal编程技术网

Python初学者-何处来<;绑定方法。。。属于<;。。。对象位于0x0000000005EAAEB8>&燃气轮机;从…起

Python初学者-何处来<;绑定方法。。。属于<;。。。对象位于0x0000000005EAAEB8>&燃气轮机;从…起,python,properties,Python,Properties,我有一节课 class ActivationResult(object): def __init__(self, successful : bool): self._successful = successful def getSuccessful(self) -> bool: return self._successful 还有一个测试 def testSuccessfulFromCreate(self): target =

我有一节课

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:>!=正确


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

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

第一次就可以了,因为您获得了属性
\u 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>>

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

错误消息非常清楚-您正在比较方法本身,而不是它在调用时将返回的值。此外,Python中不需要get/set;直接访问属性或使用
@property
@PM2Ring:我尝试使用中提到的方法(它不会产生任何错误或警告)。@PM2Ring这是一个函数注释。我意识到它可能只是一个输入错误,您忘记了括号,但正如您所说的“初学者”在标题中,我想我会解释一些我希望有用的东西。谢谢你的回答,这对加深理解非常有帮助。
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