ID生成器:类变量与收益率

时间:2020-07-29 14:25:28

标签: python python-3.x python-3.6

我有一些可以在创建时为每个实例赋予唯一ID的类。我可以通过以下两种方法之一来执行此操作,但不知道哪种方法更好。第一种方法是使用类变量和类方法来设置ID。用户可以通过调用类似SomeClass.unique_id = something之类的方法来解决此问题,但这不太可能。第二种方法是使用带有yield和无限while循环的静态方法。我在下面显示了这两种方法(请注意,出于示例目的,这两种方法仅具有相同的名称)。

class SomeClass():
    
    def __init__(self, *args, **kwargs):
        self.id = self.generate_id()

    # Method 1:
    unique_id = 0
    @classmethod
    def generate_id(cls):
        cls.unique_id += 1
        return cls.unique_id

    # Method 2:
    @staticmethod
    def generate_id():
        unique_id = 0
        while True:
            unique_id += 1
            yield unique_id

在我的代码中使用哪种方法更好?

1 个答案:

答案 0 :(得分:6)

考虑使用itertools.count(),它的工作原理基本上类似于生成器函数:

import itertools 
class SomeClass:
    id_counter = itertools.count()

    def __init__(self):
        self.id = next(self.id_counter)


a, b = SomeClass(), SomeClass()
print(a.id)  # output: 0
print(b.id)  # output: 1

用户通过编写类似a.id = 'banana'的东西来弄乱您唯一的ID值的问题是另一个问题,尽管您无法阻止他们这样做,但它或多或少是Python灵活性所固有的。如果我写np.array = list,那就在我身上。

相关问题