[英]ID generator: class variable vs while yield
我有一些 class 在創建時為每個實例提供一個唯一的 ID。 我可以通過兩種方式之一做到這一點,但不知道哪種方式更好。 第一種方法是使用 class 變量和類方法來設置 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
在我的代碼中使用哪種方法更好?
考慮使用itertools.count()
,它的工作原理基本上類似於您的生成器 function:
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
,那是我的事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.