簡體   English   中英

ID 生成器:class 變量 vs while yield

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM