重载 __eq__ 方法以返回自定义对象

15 浏览
0 Comments

重载 __eq__ 方法以返回自定义对象

我正在用Python编写一种DSL,并且我想要重载运算符,以便能够更轻松地编写我的DSL表达式。例如,我想要写Var(\"a\") + Var(\"b\")并获得等价的表示Add(Var(\"a\"), Var(\"b\"))。为此,我重载了__add__方法,并且对于这个例子它工作得很好。\n然而,我尝试重载__eq__方法以实现类似的效果:我想要写Var(\"a\") == Var(\"b\")并获得等价的表示Eq(Var(\"a\"), Var(\"b\"))。通过重载__eq__方法,返回Eq的实例,我实现了我的目标。但是当重载__eq__方法时,它显然会干扰Python的标准行为,比如Var(\"b\") in [Var(\"a\")]返回True。\n是否有一种方法可以实现我的目标,即能够写Var(\"a\") == Var(\"b\")并获得Eq(Var(\"a\"), Var(\"b\")),但仍然能够写if Var(\"a\") == Var(\"b\"): blablabla或将表达式放入内置容器中等等?

0
0 Comments

无法同时实现两种行为,需要选择其中一种。无法可靠地检测到使用.__eq__()方法的上下文。

如果需要同时使用两种行为,则需要使用不同的运算符或方法来表示DSL行为。

问题的原因是在使用.__eq__()方法时无法可靠地检测到其上下文。因此,无法同时实现两种不同的行为。如果需要同时实现两种行为,则需要使用其他运算符或方法来表示DSL(领域特定语言)的行为。

解决方法是选择一种行为而放弃另一种行为。由于无法可靠地检测到.__eq__()方法的上下文,因此需要使用其他方式来表示所需的行为。可以考虑使用不同的运算符或方法来实现DSL行为,以满足不同的需求。

总结起来,由于无法可靠地检测到.__eq__()方法的上下文,无法同时实现两种不同的行为。因此,需要选择一种行为并使用其他运算符或方法来表示所需的行为。这样可以在满足需求的同时避免出现问题。

0