当前位置: 首页 > 知识库问答 >
问题:

“对象不是无”与“如果对象”相同吗?[副本]

齐望
2023-03-14

我通常使用“IsNotNone”来测试对象是否为空。我看到的代码只是使用“if对象”。它们是一样的吗?

例如,

if Dog:
  ...

VS

if Dog is not None:
  ...

共有1个答案

秦宏盛
2023-03-14

语法if Dog调用类Dog\uuuubool\uuuuu(或\uuu len\uuuu)魔术方法来获取其布尔表示。

一些模块实现了他们对象的__bool__方法,这样它将引发一个异常,如果调用如熊猫:

ValueError: The truth value of a Series is ambiguous...

虽然默认情况下,如果这两个神奇的方法都没有实现,对象将返回True。大多数内置实现了__bool____len__神奇的方法,所以如果语句正常,则在中使用它们。

因此,对于list,您只需执行以下操作:

my_list = []
if my_list:
    print("List has objects in it") # This will not be called with this code.

默认情况下,类将返回True

class Foo():
    # Classes do this by default
    # def __bool__(self):
    #     return True
    pass
f = Foo()
if f:
     print("This variable references an object") # This will be called

你可以用这样一种方式实现你的类,Python可以更好地理解什么被认为是Truthy,什么被认为是Falsey:

class Foo():
    def __init__(self):
        self.my_list = []
    def append(self, ele):
        self.my_list.append(ele)
    # I could implement this instead of `len`
    # def __bool__(self):
    #     # Some object will raise an exception here
    #     return bool(self.my_list)
    def __len__(self):
        return len(self.my_list) > 1

f = Foo()
print("True") if f else print("False") # False
f.append(2)
print("True") if f else print("False") # False
f.append(2)
print("True") if f else print("False") # True

要了解更多信息,请参阅真值测试

 类似资料:
  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"

  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"

  • 问题内容: 我尝试过一些关于绑定和未绑定方法的代码。当我们调用它们时,我认为它们都会返回对象。但是,当我用于获取一些信息时,它返回的内容我并不理解。 IDE:Eclipse 插件:pydev 输出是… 为什么#1和#2返回相同的ID?他们不是不同的对象吗?如果我们分配和两个变量,#3,#4回报不同的ID。 我认为#3和#4表明它们不是同一对象,而是#1和#2 … 绑定方法的ID和未绑定方法的ID有

  • 问题内容: 看了一下,我似乎找不到与此相同的问题。我的问题是关于Java的。 创建时,请使用以下语法: 其中的方法也让我觉得它是一个,但是它没有遵循类的Java命名约定,这让我感到困惑。它也是原始类型的数组,可以像原始类型一样使用。 是一个(或任何原始阵列I猜测)的对象,或一个原始? 问题答案: Java中的数组是的子类,因此它是一种对象类型-即使它包含原始类型。您可以检查以下内容:

  • 本文向大家介绍null是对象吗?相关面试题,主要包含被问及null是对象吗?时的应答技巧和注意事项,需要的朋友参考一下 根据ECMA规范,虽然返回,但实质上是值类型,其类型为,并且在中返回并不会做其他转换。

  • Kotlin代码是这样的: 可以简单地更改为 我知道同伴对象可以用来作为真正的java静态函数使用,但是使用同伴对象还有其他的优点吗?