在这种情况下,我被要求阅读来自各种来源的数据库更新说明集合。所有源都将包含一个主键值,以便将更新应用于数据库的代码可以找到正确的记录。但是,这些文件在报告的附加列方面会有所不同。
当我阅读和创建更新说明时,我必须区分提供了列(例如,MiddleName)但为空(意味着没有中间名并且该字段应更新为 NULL)的更新和更新其中未包含 MiddleName 字段(意味着更新根本不应触及中间名列)。
前一种情况(提供了列但没有值)似乎可以用 None 值恰本地表示。然而,对于第二种情况,我希望有一个 NotInFile 我可以像使用 None 一样使用的“值”。
下面是正确的实现方式吗?
NotInFile = 1
class PersonUpdate(object):
def __init__(self):
self.PersonID = None
self.FirstName = NotInFile
self.MiddleName = NotInFile
然后在另一个模块中
import othermod
upd = othermod.PersonUpdate()
if upd.MiddleName is othermod.NotInFile:
print 'Hey, middle name was not supplied'
最佳答案
我没有发现您的实现有什么特别的问题。但是,1
不一定是最佳标记值,因为它是 Cpython 中的缓存常量。 (例如 -1+2 is 1
将返回 True
)。在这些情况下,我可能会考虑使用哨兵对象实例:
NotInFile = object()
python 还提供了一些其他命名常量,您可以在合适的情况下使用它们:NotImplemented
和 Ellipsis
立即浮现在脑海中。 (请注意,我不建议您使用这些常量……我只是提供更多选项)。
关于python - 定义我自己的 None-like Python 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277816/