gpt4 book ai didi

python - 真值评估无效时是否存在任何内置 Python 值?

转载 作者:太空狗 更新时间:2023-10-30 01:28:56 26 4
gpt4 key购买 nike

我有一组子类,它们都应该定义一个属性 x,该属性的计算结果应该为 True 或 False。为了在我忘记在子类中设置此值时捕获错误,我想在其父类(super class)中将其设置为真值评估导致错误的值。这种行为在 Python 中是否有任何内置值?我有点希望 NotImplemented 有这种行为,但它的计算结果为 True

我可以将它设置为 numpy.array([0, 0]),其中 if x: 引发 ValueError,但感觉不对.同样,我可以定义自己的类,其中 __bool__ 引发异常。但是是否有适合此目的的任何内置值?

其他替代方案是 set a property (abstract or not)或者根本不定义它(所以我们得到 AttributeError)。

最佳答案

我最近遇到了同样的问题,但用例略有不同:

我有一个带有标志属性的类,其值由调用者传递给 __init__。类的对象可以从两个不同版本的数据创建,其中旧版本的数据不包含确定标志是否应为 TrueFalse 所需的信息>。

将其他 boolean 值设置为 None(这是表示缺失数据的常用方式)将不起作用,因为 None 很乐意评估为 False.

和你一样,我没有找到满意的内置解决方案,所以我自己写了一个。

(为python2.7写的,但是对于python3很容易调整)

class NotTrueNorFalseType(object):
"""
A singleton class whose instance can be used in place of True or False, to represent
a value which has no true-value nor false-value, e.g. a boolean flag the value of
which is unknown or undefined.
"""
def __new__(cls, *args, **kwargs):
# singleton
try:
obj = cls._obj
except AttributeError:
obj = object.__new__(cls, *args, **kwargs)
cls._obj = obj
return obj

def __nonzero__(self):
raise TypeError('%s: Value is neither True nor False' % self)

def __repr__(self):
return 'NotTrueNorFalse'

NotTrueNorFalse = NotTrueNorFalseType()

此类中的设计(最小)决策受到 None 单例的启发(例如,将单例实例命名为“Foo”和类“FooType”,从 返回“Foo” __repr__,在无效操作时引发 TypeError)。

关于python - 真值评估无效时是否存在任何内置 Python 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com