簡體   English   中英

如何使用分配的“id”變量獲取 class 實例?

[英]How to get class instance using assigned “id” variable?

是否可以使用Item class 中的id變量來獲得wooden_sword object?

class Item:
    __ids = count(0)

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


class Weapon(Item):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


wooden_sword = Weapon()

Item__init__存儲到共享(類屬性) WeakValueDictionary ,您可以從備用構造函數( classmethod )進行查找:

import weakref

class Item:
    id_to_item = weakref.WeakValueDictionary()
    __ids = count(0)

    def __init__(self):
        self.id = next(self.__ids)
        self.id_to_item[self.id] = self

    @classmethod
    def from_id(cls, id):
        return cls.id_to_item[id]

如果對應於該id的 object 已被垃圾收集,則Item.from_id可以引發異常(可能像普通KeyError一樣的dict ;測試它); 使用普通的dict可以避免這個問題,盡管它有 memory “泄漏”的風險(不是真正的泄漏;object 可用,但可能永遠不會再次使用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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