【发布时间】:2012-04-04 23:37:27
【问题描述】:
Python 中的 If 语句允许您执行以下操作:
if not x:
print "X is false."
如果您使用的是空列表、空字典、None、0 等,这可以工作,但是如果您有自己的自定义类怎么办?你可以为那个类分配一个 false 值,以便在相同的条件样式中,它会返回 false 吗?
【问题讨论】:
标签: python class conditional-statements
Python 中的 If 语句允许您执行以下操作:
if not x:
print "X is false."
如果您使用的是空列表、空字典、None、0 等,这可以工作,但是如果您有自己的自定义类怎么办?你可以为那个类分配一个 false 值,以便在相同的条件样式中,它会返回 false 吗?
【问题讨论】:
标签: python class conditional-statements
你需要在你的类上实现__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'
如果尚未定义__nonzero__,则实现将调用__len__,并且如果实例返回非零值,则该实例将被视为True。如果__len__ 也未定义,则所有实例都将被视为True。
在 Python 3 中,使用 __bool__ 代替 __nonzero__。
【讨论】:
__bool__。
() 放在任何地方,它就像列表和数字一样。
class Foo:
def __nonzero__(self): return False
__bool__ = __nonzero__ # this is for python3
In [254]: if Foo():
.....: print 'Yeah'
.....: else: print 'Nay'
.....:
Nay
或者,如果你想要超便携,你可以只定义__len__,这在两种语言中都有相同的效果,但它有一个(潜在的)缺点,它意味着你的对象有一个有意义的度量长度(它可能不会)。
这适用于任何实例,具体取决于您在方法中放置的实际逻辑。
【讨论】: