【问题标题】:Python class instance evaluates to false?Python类实例评估为假?
【发布时间】:2017-12-25 07:15:11
【问题描述】:

在下面的例子中:

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())

if ex 语句正在评估为False,但我没有得到任何输出。是什么导致此实例评估为 False

【问题讨论】:

  • 你继承自 dict 并且一个空字典计算为 False。你想做什么测试?例如if ex is not None: 将评估为 True

标签: python dictionary boolean


【解决方案1】:

继承自dict。字典的truthiness(就像几乎每个集合一样)取决于它是否包含元素。这适用于列表、集合、字典和字符串(字符串有时被视为字符的有序集合)。此外,许多图书馆的馆藏都遵循相同的规则(如计数器等)。

您在此处构造一个不包含任何元素的字典。所以真实性是False

但是,您可以再次覆盖真实性,使用:

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

      def __bool__(self):
          return True

      def get_name(self):
        return self.name

请注意,您是否发现此类Example(..) 的真实性与底层空字典是您必须做出的决定您自己(当然最好遵循“Python 的准则)。所以上述代码片段本身不适合您的应用程序。这取决于您想用它做什么。

此外,将额外的未命名参数 (*args) 和命名参数 (**kwargs) 传递给字典构造函数以立即将元素添加到底层字典以及修改 __repr__ 和/或 @ 会很有用987654329@函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2015-12-12
    相关资源
    最近更新 更多