“对象不是无”和对象一样吗?

时间:2019-06-28 15:42:20

标签: python

我通常使用“不是非”来测试对象是否为空。我看到代码只使用'if object'。他们是同一回事吗?

例如,

extension XCUIElement {
    func _forcePress() {
        XCTAssert(exists) // Forces the app to idle before interacting
        perform(Selector(("forcePress")))
    }
}

VS

if Dog:
  ...

1 个答案:

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