我有一些可以在创建时为每个实例赋予唯一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
在我的代码中使用哪种方法更好?
答案 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
,那就在我身上。