2017-07-19 27 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
相關問題