另一个问题提供了一个很好的,简单的解决方案,用于实现对象相等的测试.我将重复上下文的答案:
class CommonEqualityMixin(object):
def __eq__(self, other):
return (isinstance(other, self.__class__)
and self.__dict__ == other.__dict__)
def __ne__(self, other):
return not self.__eq__(other)
class Foo(CommonEqualityMixin):
def __init__(self, item):
self.item = item
Run Code Online (Sandbox Code Playgroud)
我想为一个使用的类做这个__slots__.我知道基类和子类都必须使用插槽,但是你如何定义__eq__插槽呢?
我在 Python 中声明了一个类Triangle,它以底和高为参数,并有一个计算并返回三角形面积的__init__方法。area该类__eq__的方法Triangle比较三角形的面积并返回值。该类定义如下:
class Shape(object):
def area(self):
raise AttributeException("Subclasses should override this method.")
class Triangle(Shape):
def __init__(self, base, height):
"""
base = base of the triangle.
height = height of the triangle
"""
self.base = base
self.height = height
def area(self):
return (self.base * self.height)/2
def __str__(self):
return 'Triangle with base ' + str(self.base) + ' and height ' + str(self.height)
def __eq__(self, other):
"""
Two triangles are equal if …Run Code Online (Sandbox Code Playgroud) 我创建了一个 Enum 类,如图所示:
class MsgType(Enum):
# ADMINISTRATIVE MESSAGE
HEARTBEAT = "0"
LOGON = "A"
LOGOUT = "5"
REJECT_SESSION_LEVEL = "3"
RESEND_REQUEST = "2"
SEQUENCE_RESET = "4"
SESSION_REJECT = "3"
TEST_REQUEST = "1"
Run Code Online (Sandbox Code Playgroud)
我想使用这个类与我在阅读消息后得到的字符串进行比较。我正在比较如图所示的值。中的值msg_type是 a 类型str。
def read_admin_msg(message):
msg_type = read_header(message)
if msg_type == ct.MsgType.HEARTBEAT:
print(msg_type)
elif msg_type == ct.MsgType.LOGON:
print(msg_type)
elif msg_type == ct.MsgType.LOGOUT:
print(msg_type)
elif msg_type == ct.MsgType.REJECT_SESSION_LEVEL:
print(msg_type)
elif msg_type == ct.MsgType.RESEND_REQUEST:
print(msg_type)
elif msg_type == ct.MsgType.SEQUENCE_RESET:
print(msg_type)
elif msg_type == ct.MsgType.SESSION_REJECT:
print(msg_type)
elif …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的自定义对象:
class MyObject:
def __init__(self, x, y):
self.x = x
self.y = y
Run Code Online (Sandbox Code Playgroud)
我希望它根据规则与集合一起使用:如果对象相同,则x它们相等。
s = set()
s.add(MyObject(1, 2))
print(MyObject(1, 3) in s) # It is False. I want it to be True, because `x = 1` for both.
Run Code Online (Sandbox Code Playgroud)
有没有一种神奇的方法可以实现MyObject我的目的?