独特的SHA-1摘要生成

Lor*_*nzo 2 python sha

在Python中,我创建了3个对象,每个对象都有唯一的标识符.

我在所有这些对象中生成此唯一标识符的方式如下:

class Foo(object):
    def __init__(self):
        unique_id = hashlib.sha1(str(time.time())).hexdigest()
Run Code Online (Sandbox Code Playgroud)

我像这样一个接一个地创建这些对象:

a = Foo()
b = Foo()
c = Foo()
Run Code Online (Sandbox Code Playgroud)

所有这些实例最终都具有相同的效果,unique_id因为在创建之间没有足够的时间.

我已经使用了sleep(0.1)对象创作,但我确信有更优雅的方法可以解决这个问题.

建议?

Fre*_*Foo 5

Python对象已经有了唯一的标识符,这就是它们的标识符id.只要对象保持存在,这只是唯一的; 的id一个对象被删除后可以重复使用.

您也可以使用uuid标准库中的模块,或者只在类中保留一个计数器:

class Foo(object):
    __COUNT = 0
    # or: __COUNT = random.randint(0, 2**N - 1)

    def __init__(self):
        self.unique_id = self.__COUNT  # or take the SHA1 of the count
        type(self).__COUNT += 1
Run Code Online (Sandbox Code Playgroud)