相关疑难解决方法(0)

使用插槽的Python类的相等性

另一个问题提供了一个很好的,简单的解决方案,用于实现对象相等的测试.我将重复上下文的答案:

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 equality class slots

6
推荐指数
1
解决办法
1255
查看次数

__eq__ 方法对于 == 和 > 运算符都返回 True

我在 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)

python comparison

5
推荐指数
1
解决办法
4914
查看次数

Python - 用于比较时默认获取枚举的值

我创建了一个 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)

python enums python-3.x

5
推荐指数
1
解决办法
2362
查看次数

Python中的集合有没有神奇的方法?

我有一个像这样的自定义对象:

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我的目的?

python python-3.x

0
推荐指数
1
解决办法
52
查看次数

标签 统计

python ×4

python-3.x ×2

class ×1

comparison ×1

enums ×1

equality ×1

slots ×1