Python类实例的计算结果为false?

aoi*_*iee 2 python dictionary boolean

在以下示例中:

class Example(dict):
  def __init__(self, name):
    self.name = name

  def get_name(self):
    return self.name

ex = Example('ex')
if ex:
  print(ex.get_name())
Run Code Online (Sandbox Code Playgroud)

if ex声明正在评估False,我没有得到任何输出.导致此实例评估的原因是False什么?

Wil*_*sem 7

继承了dict.字典真实性(几乎与每个集合一样)取决于它是否包含元素.这适用于列表,集合,字典和字符串(字符串有时被视为有序的字符集合).此外,许多库都有遵循相同规则的集合(如计数器等).

你在这里构造一个不包含任何元素的字典.所以真实性是False.

然而,您可以再次覆盖真实性:

class Example(dict):
      def __init__(self, name):
        self.name = name

      def __bool__(self):
          return True

      def get_name(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

请注意,您是否发现Example(..)基础空字典的真实性是您必须自己做出的决定(当然最好遵循"Python的指导原则".)因此上述代码片段本身对您的应用程序不正确.这取决于你想用它做什么.

此外,将其他未命名的arguments(*args)和命名参数(**kwargs)传递给字典构造函数以将元素立即添加到基础字典以及修改__repr__和/或__str__函数可能很有用.

class Example(dict):
    def __init__(self, name,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.name = name

    def __bool__(self):
        return True

    def get_name(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)