为了账号安全,请及时绑定邮箱和手机立即绑定

创建自定义类 QPointF

创建自定义类 QPointF

慕码人2483693 2021-12-09 18:33:06
我想用计算欧几里得距离的方法创建我的类 Point。Point 类继承自 QPointF 类。但是在执行 add 或 mul 等操作时,结果不是 Point 类,而是 QPointF。如何解决?我应该覆盖所有魔术方法还是有其他解决方案?from PyQt5.QtCore import QPointFclass Point(QPointF):    def __init__(self, *args, **kwargs):        super(QPointF, self).__init__(*args, **kwargs)    def dist(self):        return (self._p.x() * self._p.x() +                self._p.y() * self._p.y()) ** 0.5 a = Point(1, 2) b = Point(2, 3) print(a + b, type(a + b))>> PyQt5.QtCore.QPointF(3.0, 5.0) <class 'PyQt5.QtCore.QPointF'>
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

是的,您必须覆盖方法__add__,__mul__并且__repr__:


from PyQt5.QtCore import QPointF


class Point(QPointF):

    def dist(self):

        return (self._p.x() * self._p.x() + self._p.y() * self._p.y()) ** 0.5


    def __add__(self, other):

        return self.__class__(super(self.__class__, self).__add__(other))


    def __mul__(self, other):

        return self.__class__(super(self.__class__, self).__mul__(other))


    def __repr__(self):

        return "{}({}, {})".format(self.__class__.__name__, self.x(), self.y())


if __name__ == '__main__':

    a = Point(1, 2)

    b = Point(2, 3)

    print(a, type(a))

    print(b, type(b))

    print(a + b, type(a + b))

    a += Point(10, 10)

    print(a, type(a))

    a += QPointF(10, 10)

    print(a, type(a))

    print(a*3, type(a*3))

    print("a: {}".format(a))

    l = [a, b]

    print(l)


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信