class Dimensional:
def __init__(self, gravity, l=0, m=0, t=0):
assert type(l) == int
assert type(m) == int
assert type(t) == int
self.gravity = gravity
self.l = l
self.m = m
self.t = t
我试图定义一个__bool__
方法,该方法对任何非零值都返回True
我做了什么:
def __bool__(self):
g = self.gravity
_l = self.l
_m = self.m
_t = self.t
if not self.gravity:
g += 1
if not self.l:
_l += 1
if not self.m:
_m += 1
if not self.t:
_t += 1
if g != 0 and _l != 0 and _m != 0 and _t != 0:
return True
else:
return False
答案 0 :(得分:0)
只需在所有属性上返回or
表达式的布尔转换:
def __bool__(self):
return bool(self.gravity or self.l or self.m or self.t)
如果这些值中的任何值不为0,则bool()
将生成True
,否则它将生成False
。
您的代码始终返回True,无论如何;对于0
你递增变量的任何字段;所以你的4个局部变量都以非零值结束,保证。
使用上述方法进行演示:
>>> bool(Dimensional(0,1,1,1))
True
>>> bool(Dimensional(0,0,0,0))
False
请注意,如果您使用的是Python 2,则需要将方法命名为__nonzero__()
; __bool__
是Python 3的名称。