Ответ 1
Является ли это Python 2.x или Python 3.x? Для Python 2.x вы хотите вместо этого заменить __nonzero__
.
class test:
def __nonzero__(self):
return False
Все, что я хочу, это для bool (myInstance) для возврата False (и для myInstance для оценки False, когда в условном, например if/или/и. Я знаю, как переопределить > , <, =)
Я пробовал это:
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)
вернет True
если есть элементы 1+ (непустой список), и False
если есть 0 элементов (пустой список). Это сработало для меня.
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
Как и Джон Ла Рой, я использую:
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__
который должен работать (не подтвержден) или писать метакласс:) самостоятельно.