私が欲しいのは、bool(myInstance)がFalseを返すことだけです(そして、myInstanceがif/or/andなどの条件付きの場合にFalseと評価されます。>、<、=をオーバーライドする方法を知っています)
私はこれを試しました:
class test:
def __bool__(self):
return False
myInst = test()
print bool(myInst) #prints "True"
print myInst.__bool__() #prints "False"
助言がありますか?
(Python 2.6を使用しています)
これはPython 2.xまたはPython 3.x?の場合Python 2.xの場合、オーバーライドしようとしています__nonzero__
代わりに。
class test:
def __nonzero__(self):
return False
コードをpython3との上位互換性を維持したい場合は、次のようにすることができます
class test:
def __bool__(self):
return False
__nonzero__=__bool__
test
クラスがリストに似ている場合、___len__
_を定義し、bool(myInstanceOfTest)
は、1個以上のアイテム(空でないリスト)がある場合はTrue
を返し、0個のアイテム(空のリスト)がある場合はFalse
を返します。これでうまくいきました。
_class MinPriorityQueue(object):
def __init__(self, iterable):
self.priorityQueue = heapq.heapify(iterable)
def __len__(self):
return len(self.priorityQueue)
>>> bool(MinPriorityQueue([])
False
>>> bool(MinPriorityQueue([1,3,2])
True
_
John La Rooyと同様に、私は次のものを使用します。
class Test(object):
def __bool__(self):
return False
def __nonzero__(self):
return self.__bool__()
[これは@ john-la-rooyからの回答に対するコメントですが、まだコメントすることはできません:)]
Python3との互換性のために、実行できます(これを探していました)
class test(object):
def __bool__(self):
return False
__nonzero__=__bool__
唯一の問題は、サブクラスで__nonzero__ = __bool__
を変更するたびに__bool__
を繰り返す必要があることです。それ以外の場合、__nonzero__
はスーパークラスから保持されます。あなたが試すことができます
from builtins import object # needs to be installed !
class test(object):
def __bool__(self):
return False
__nonzero__=__bool__
動作する(確認されていない)か、メタクラス:)を自分で作成する必要があります。