【发布时间】:2016-08-19 11:49:29
【问题描述】:
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
【问题讨论】:
-
assert 不是控制应用程序流程的好方法。您可能还会发现
any很有用 -
我不明白你在
__bool__里做什么。你是说return any(self.gravity, self.l, self.m, self.t)吗? -
这与可选参数有什么关系,或者确定它们是否由用户指定?
-
为了避免所有那些
assert命令...如果l、m和t必须是整数值,如果任何参数不等于它自己的整数值(if int(m) != m: raise ValueError('Meaningful error message.')),然后将每个整数值分配给对象的字段(self.m = int(m))。