如何创建返回标志对象
当前a set of functions返回success=True
或False
。如何创建返回标志对象
虽然我们发现这还不够好,因为False
既可以传达“有效结果”也可以传达“无效结果”,并且我们希望每种情况下的行为都不相同。
So I think they should be changed改为返回{True, False, InvalidResult}
,其中bool(InvalidResult)
为向后兼容性为false,但可以使用if is InvalidResult
进行测试。
我不确定这个术语是什么,但我想象的是比较函数返回的built-in NotImplemented
之类的东西。这在文档中被称为“特殊值”,并且是NotImplementedType
类型。
如何创建这样的对象以及它应具有哪些方法/属性?我也应该创建自己的类型,例如NotImplementedType
,或者是否存在传达此“标志”概念的现有类型?这是一个类似的类的对象来True
,False
,None
,NotImplemented
等
你可以只使用None
或0
为InvalidResult
值,例如在my_mod
中,定义InvalidResult = None
,然后在别处可以测试if result is my_mod.InvalidResult
。请参阅此处查看有关“无”的更多信息:False or None vs. None or False
或者您可以使用合适的布尔转换方法定义对象;希望其他人能与这些细节融合在一起。
注意,你去哪个方式,你必须要小心,如果你有多布尔表达式:InvalidResult and False
会给InvalidResult
但False and InvalidResult
会给False
。
显然,这被称为 “sentinel”,是一种简单,因为这:
class InvalidResultType(object):
"""
Indicates that minimization has failed and result is invalid (such as a
boundary or constraint violation)
"""
def __repr__(self):
return 'InvalidResult'
def __bool__(self):
return False
def __reduce__(self):
return 'InvalidResult'
InvalidResult = InvalidResultType()
success = InvalidResult
assert success == InvalidResult
assert success is InvalidResult
assert not bool(InvalidResult)
assert InvalidResult != True
assert InvalidResult != False # Not sure about this yet
assert InvalidResult != None
现在当然我发现类似的问题:
Defining my own None-like Python constant
和__reduce__
威力太过分了;我不知道,如果酸洗或复制将永远事情
How to create a second None in Python? Making a singleton object where the id is always the same
听起来像一个“tribool” ...是'None'也是一个有效的值或可能是被用来指没有结果? –
你不能使用None? BOOL(无)==假 – georgexsh
@georgexsh是的,但认为InvalidResult更清晰 – endolith