在Python中拥有唯一标识符的正确方法?

Eva*_*ark 6 python identifier

基本上,我有一个像这样的列表:[START, 'foo', 'bar', 'spam', eggs', END]以后需要START/END标识符,以便稍后进行比较.现在,我把它设置成这样:

START = object()
END = object()
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但是它遇到了不能使用酸洗的问题.我尝试以下方式做到这一点,但它似乎是一种实现此目的的可怕方法:

class START(object):pass
class END(object):pass
Run Code Online (Sandbox Code Playgroud)

任何人都可以分享更好的方法吗?另外,我上面建立的例子只是对另一个问题的过度简化.

Ale*_*lli 10

如果你想要一个保证唯一的对象,并且还可以保证恢复到完全相同的标识,如果是右后卫,顶级函数,类,类实例,如果你关心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()
Run Code Online (Sandbox Code Playgroud)

这些都不是很糟糕,没有任何特殊优势(取决于你是否关心==或只是is).可能会def因为一般性,简洁性和轻量级而获胜.