2017-07-19 315 views
2

在下面的例子:Python类实例的计算结果为false?

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

+6

您从'dict'继承而来一个空字典计算为'False'。你想要做什么测试?例如'如果ex不是None:'将评估为'True'。 – AChampion

回答

7

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

你在这里构建一个字典不包含任何元素。所以真实性是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__和/或__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