基本上,我有一个像这样的列表:[START, 'foo', 'bar', 'spam', eggs', END]
和 START/END 标识符是以后需要的,所以我以后可以对比。现在,我把它设置成这样:
START = object()
END = object()
这工作正常,但遇到无法使用 pickling 的问题。我尝试按照以下方式进行操作,但这似乎是一种糟糕的方法:
class START(object):pass
class END(object):pass
有人可以分享更好的方法吗?此外,我在上面设置的示例只是对另一个问题的过度简化。
最佳答案
如果你想要一个保证唯一的对象,并且也可以保证恢复到完全相同的标识,如果 pickled 和 unpickled 马上回来,顶级函数,类,类实例,如果你关心 is
而不是 ==
也列表(和其他可变的),都很好。即,任何:
# work for == as well as is
class START(object): pass
def START(): pass
class Whatever(object): pass
START = Whatever()
# if you don't care for "accidental" == and only check with `is`
START = []
START = {}
START = set()
这些都不是可怕的,没有任何特别的优势(取决于你是否关心 ==
或只是 is
)。可能 def
凭借通用性、简洁性和更轻的重量取胜。
关于python - 在 Python 中拥有唯一标识符的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677726/