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