提问人:Tiancheng Liu 提问时间:8/2/2017 更新时间:8/2/2017 访问量:313
如何在 python 中使用相同的参数但不同的参数制作相同的实例
How to make same instance with same arguments but different for different arguments in python
问:
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__?
答:
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
==
fn
self.fn
0赞
Jean-François Fabre
8/2/2017
也可能是限制在实际对象,而不是子对象isinstance(other, A)
type(other) == A
A
0赞
Tiancheng Liu
8/2/2017
谢谢你的帮助。如果我想使 a1 是 a2 等于 True 怎么样?
0赞
FabienP
8/2/2017
#2
它不是你要找的单例。
单例是指您的类一次只能生成一个实例,因此您将拥有 True。A('a') is A('b')
从您的示例中可以推断出您正在寻找定义,这已经在这里进行了解释。
请注意,如果要测试自定义对象的相等性,则可能需要定义 ,此处对此进行了说明__eq__
__hash__
评论
def __eq__(self,other): return self.fn == other.fn
==