假设我想自由地创建类的实例,但是如果我用相同的参数实例化,我想得到表示该参数的相同的唯一实例。例如:
a = MyClass('Instance 1');
b = MyClass('Instance 2');
c = MyClass('Instance 1');
我希望a == c
是True
,基于我传入的唯一标识符。你知道吗
注:
(1)我不是在说操纵相等运算符--我希望a
与c
是同一个实例。你知道吗
(2)这是作为库代码使用的,因此必须执行唯一性—我们不能指望用户做正确的事情(不管是什么)。你知道吗
有没有一个规范的方法来实现这一点?我经常遇到这种模式,但我通常会看到涉及影子类的解决方案,这意味着只用于内部实例化。我想我有一个更干净的解决方案,但它确实涉及get()方法,我想知道我是否可以做得更好。你知道吗
我会用元类。此解决方案避免调用
__init__()
太多次:参考和详细说明:https://stackoverflow.com/a/6798042/8747
这是可以做到的(假设
args
都是可散列的)is
是显示两个对象是同一实例的python操作符。==
在对象上回退到is
,在对象上它没有被覆盖。你知道吗正如在评论中指出的,如果你有副作用的
__init__
,这可能会有点麻烦。下面是一个可以避免这种情况的实现:相关问题 更多 >
编程相关推荐