我有一种情况需要从各种来源读取数据库更新指令的集合.所有源都将包含主键值,以便将更新应用于数据库的代码可以找到正确的记录.但是,报告的其他列中的文件会有所不同.
当我阅读并创建更新指令时,我必须区分一个更新,其中提供了一个列(例如,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不一定是最好的sentinel值,因为它是Cpython中的缓存常量. (例如-1 2为1将返回True).在这些情况下,我可能会考虑使用sentinel对象实例:
NotInFile = object()
python还提供了一些其他命名常量,如果它们合适,你可以使用它们:NotImplemented和Ellipsis立即浮现在脑海中. (注意,我不建议你使用这些常量……我只是提供更多选项).