我通常使用“不是非”来测试对象是否为空。我看到代码只使用'if object'。他们是同一回事吗?
例如,
extension XCUIElement {
func _forcePress() {
XCTAssert(exists) // Forces the app to idle before interacting
perform(Selector(("forcePress")))
}
}
VS
if Dog:
...
答案 0 :(得分:3)
if Dog
调用类__bool__
的{{1}}(或__len__
)魔术方法以获取其布尔表示形式。
某些模块实现其对象的Dog
方法,以便在调用诸如pandas时会引发异常:
__bool__
尽管默认情况下,如果没有实现任何魔术方法,对象将返回ValueError: The truth value of a Series is ambiguous...
。大多数内置函数都实现True
或__bool__
魔术方法,因此在__len__
语句中使用它们是正常的。
因此,对于if
,您可以执行以下操作:
list
如果类不是None,则默认情况下将返回True:
my_list = []
if my_list:
print("List has objects in it") # This will not be called with this code.
您可以通过以下方式实现您的类:python可以更好地理解什么是Truthy和什么是Falsey:
class Foo():
# Classes do this by default
# def __bool__(self):
# return True
pass
f = Foo()
if f:
print("This object is not None") # This will be called
f = None
if f:
print("This object is not None") # This will not be called
要了解更多信息,请参见truth value testing