如何使用相同的参数创建相同的实例,但在python中使用不同的参数

时间:2017-08-01 21:14:37

标签: python singleton

class A():
    def __init__(self, fn):
        self.fn = fn

a1 = A('a')        
a2 = A('a') 
b = A('b') 

print (a1==a2)
print (a1==b)

结果首先应为True,第二个为False。我知道在Python中实现单例的一些方法。但是所有这些只为每次调用生成一个实例。我们如何将__new__方法链接到__init __?

2 个答案:

答案 0 :(得分:3)

没有理由在这里考虑单身人士,没有理由对__new__做任何事情。如果您希望根据某些条件将两个实例视为相等,则需要定义__eq__

def __eq__(self, other):
    return isinstance(other, A) and self.fn == other.fn

(注意,fn通常用作函数的持有者;您应该考虑另一个属性名称。)

答案 1 :(得分:0)

这不是你想要的单身人士。 单例是指您的类当时只能生成一个实例,因此您将A('a') is A('b')为真。

从您的示例中可以推断出,您希望定义__eq__,已经解释过here。 请注意,如果要测试自定义对象的相等性,则可能必须定义__hash__,其解释为here