Kel*_*tek 16 python class conditional-statements
如果Python中的语句允许您执行以下操作:
if not x:
print "X is false."
Run Code Online (Sandbox Code Playgroud)
如果您使用空列表,空字典,无,0等,这可以工作,但如果您有自己的自定义类怎么办?你能为该类分配一个假值,以便在相同的条件样式中,它将返回false吗?
int*_*jay 25
您需要__nonzero__在类上实现该方法.这应返回True或False以确定真值:
class MyClass(object):
def __init__(self, val):
self.val = val
def __nonzero__(self):
return self.val != 0 #This is an example, you can use any condition
x = MyClass(0)
if not x:
print 'x is false'
Run Code Online (Sandbox Code Playgroud)
如果__nonzero__尚未定义,则实现将调用__len__,如果实例返回非零值,则该实例将被视为True.如果__len__尚未定义,则所有实例都将被视为True.
在Python 3中,__bool__使用而不是__nonzero__.
class Foo:
def __nonzero__(self): return False
__bool__ = __nonzero__ # this is for python3
In [254]: if Foo():
.....: print 'Yeah'
.....: else: print 'Nay'
.....:
Nay
Run Code Online (Sandbox Code Playgroud)
或者,如果你想要超便携,你只能定义__len__,这将在两种语言中产生相同的效果,但它具有(潜在的)缺点,它暗示你的对象有一个有意义的长度度量(它可能不).
这适用于任何实例,具体取决于您在方法中放入的实际逻辑.
| 归档时间: |
|
| 查看次数: |
7553 次 |
| 最近记录: |