gpt4 book ai didi

Python 类实例具有唯一的某些属性

转载 作者:行者123 更新时间:2023-12-02 00:38:17 25 4
gpt4 key购买 nike

假设我想自由创建类的实例,但如果我使用相同的参数实例化,我想获得表示该参数的相同唯一实例。例如:

a = MyClass('Instance 1');
b = MyClass('Instance 2');
c = MyClass('Instance 1');

根据我传入的唯一标识符,我希望 a == cTrue

注意:

(1) 我不是在谈论操纵相等运算符 - 我希望 a 确实与 c 是同一个实例。

(2) 这是作为库代码,因此必须强制执行唯一性——我们不能仅仅指望用户做正确的事情(无论是什么)。

是否有实现这一目标的规范方法?我一直遇到这种模式,但我通常会看到涉及影子类的解决方案,仅用于内部实例化。我认为我有一个更干净的解决方案,但它确实涉及 get() 方法,我想知道我是否可以做得更好。

最佳答案

我会使用元类。此解决方案避免多次调用 __init__():

class CachedInstance(type):
_instances = {}
def __call__(cls, *args):
index = cls, args
if index not in cls._instances:
cls._instances[index] = super(CachedInstance, cls).__call__(*args)
return cls._instances[index]

class MyClass(metaclass=CachedInstance):
def __init__(self, name):
self.name = name

a = MyClass('Instance 1');
b = MyClass('Instance 2');
c = MyClass('Instance 1');
assert a is c
assert a is not b

引用及详细解释:https://stackoverflow.com/a/6798042/8747

关于Python 类实例具有唯一的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com