如何在 python 中使用相同的参数但不同的参数制作相同的实例

How to make same instance with same arguments but different for different arguments in python

提问人:Tiancheng Liu 提问时间:8/2/2017 更新时间:8/2/2017 访问量:313

问:

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__?

Python 单例

评论

1赞 Peter Wang 8/2/2017
您希望 a1 和 a2 是独立但相等的对象吗?
0赞 Jean-François Fabre 8/2/2017
定义,并重新定义运算符以满足您的需求。def __eq__(self,other): return self.fn == other.fn==

答:

3赞 Daniel Roseman 8/2/2017 #1

这里没有理由考虑单例,也没有理由对 .如果您希望根据某些条件将两个实例视为相等,则需要定义 .__new____eq__

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

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

评论

0赞 Jean-François Fabre 8/2/2017
我本来打算回答这个问题的(除了那部分)。也许你应该补充一点,如果并且可以是具有相同值的 2 个不同的类实例(等等,等等),应该重新定义isinstance==fnself.fn
0赞 Jean-François Fabre 8/2/2017
也可能是限制在实际对象,而不是子对象isinstance(other, A)type(other) == AA
0赞 Tiancheng Liu 8/2/2017
谢谢你的帮助。如果我想使 a1 是 a2 等于 True 怎么样?
0赞 FabienP 8/2/2017 #2

它不是你要找的单例。 单例是指您的类一次只能生成一个实例,因此您将拥有 True。A('a') is A('b')

从您的示例中可以推断出您正在寻找定义,这已经在这里进行了解释。 请注意,如果要测试自定义对象的相等性,则可能需要定义 ,此处对此进行了说明__eq____hash__