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