自定义占位符,如python中的None
|
我在一个函数中使用argspec,该函数采用另一个函数或方法作为参数,并返回一个如下的元组:
((\"arg1\", obj1), (\"arg2\", obj2), ...)
这意味着传递的函数的第一个参数为arg1,其默认值为obj1,依此类推。
麻烦之处:如果没有默认值,则需要一个占位符值来表示。我不能使用None,因为那样我就无法区分没有默认值和默认值为None。对于False,0,-1等也是如此。我可以使它成为具有单个元素的元组,但是用于检查它的代码将很难看,而且我无法轻易地将其变成字典。所以我想我会创建一个类似None的对象,它不是None,这就是我想出的:
class MetaNoDefault(type):
def __repr__(cls):
return cls.__name__
__str__ = __repr__
class NoDefault(object):
__metaclass__ = MetaNoDefault
现在,(\"arg1\", NoDefault)
表示arg1没有默认值,我可以执行if obj1 is NoDefault:
等操作。元类使它仅显示为NoDefault
而不是<class \'__main__.NoDefault\'>
。
有什么理由不这样做吗?有更好的解决方案吗?
没有找到相关结果
已邀请:
3 个回复
坛沤疲撑拆
,如果我可以引述自己的话: 它在那里,是一个对象,它是一个单例,其名称表示“缺少”,并且不是过度使用的None(可以作为一个部分放入队列中正常数据流)。 YMMV。
物崎巩
它也可以充当null可调用和序列。
炉挤仙挟