python - 定义我自己的 None-like Python 常量

标签 python singleton constants

在这种情况下,我被要求阅读来自各种来源的数据库更新说明集合。所有源都将包含一个主键值,以便将更新应用于数据库的代码可以找到正确的记录。但是,这些文件在报告的附加列方面会有所不同。

当我阅读和创建更新说明时,我必须区分提供了列(例如,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 还提供了一些其他命名常量,您可以在合适的情况下使用它们:NotImplementedEllipsis 立即浮现在脑海中。 (请注意,我不建议您使用这些常量……我只是提供更多选项)。

关于python - 定义我自己的 None-like Python 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277816/

相关文章:

python - 在 contains 方法中使用精确匹配正则表达式

python - 使用 Python 迭代字符串中的每个字符

c++ - 如何不使用单例?

java - 我需要使 Singleton 类中的每个方法同步吗?

c++ - 你如何正确地初始化一个结构,它的成员是一个指向 const 值的 const 指针?

java - 如何在 Java 中输入常量作为输入

python - 没有名为 'azure.storage' 的模块; 'azure' 不是一个包

python - 如何在 Windows 上使用 Python 的 "easy_install"... 没那么容易

c++ - 使用单例在线程之间传递数据

c++ - 如何为每个派生类存储一个可以从基类访问的魔数(Magic Number)?