2017-07-19 8 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'から継承し、空のdictは' False'と評価します。どのようなテストをしようとしていますか?例えば'exがNoneでない場合:'は 'True'と評価されます。 – AChampion

答えて

7

お客様dictを継承します。辞書の(ほぼすべてのコレクションのように)は、それに要素が含まれているかどうかによって異なります。これは、リスト、セット、辞書、および文字列(文字列は、文字の順序付き集合と見なされることがあります)に適用されます。さらに、多くの図書館では、同じルール(カウンターなど)に従ったコレクションがあります。

には、いずれの要素も含まれていない辞書を作成します。したがって真実はFalseです。

あなたはしかしと、再びtruthinessを上書きすることができます:あなたが根底にある空の辞書と、このようなExample(..)のtruthinessを見つけるかどうかはを作るためにあなたが持っている決定であることを

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

     def __bool__(self): return True 

     def get_name(self): 
     return self.name

注意を自分で(ともちろん、「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
関連する問題