爲什麼不這樣做可能天真地期望?在python中定義一個類的「boolness」
class Foo(object):
def __init__(self):
self.bar = 3
def __bool__(self):
return self.bar > 10
foo = Foo()
if foo:
print 'x'
else:
print 'y'
(輸出是x
)
爲什麼不這樣做可能天真地期望?在python中定義一個類的「boolness」
class Foo(object):
def __init__(self):
self.bar = 3
def __bool__(self):
return self.bar > 10
foo = Foo()
if foo:
print 'x'
else:
print 'y'
(輸出是x
)
對於Python 2-3的兼容性,只需添加到您的例子:
Foo.__nonzero__ = Foo.__bool__
或擴大美孚的原始定義,包括:
__nonzero__ = __bool__
你當然可以在反向定義它們方法名稱爲__nonzero__
,並將其分配給__bool__
,但我認爲名稱__nonzero__
僅僅是Python的原始C-ishness遺留物,它將對象解釋爲真實或虛假,基於它們與z等價ERO。只需添加上面的語句,您的代碼就可以與Python 2.x一起工作,並且在您升級到Python 3.x時會自動工作(並且最終您將作業分配給__nonzero__
)。
由於相應的特殊方法在Python 2稱爲__nonzero__()
,而不是__bool__()
直到Python 3的
重複只解決了Python 2的問題。雖然這個提供了一個便攜式解決方案。 –