Python自学成才之路 魔术方法之比较运算符,赋值运算符

关于魔术方法的定义可以参考前面两节

比较运算符

Python2中比较运算符魔术方法是__cmp__(self, other)_, 通过自定义比较规则,如果self大于other则返回正数,等于返回0,小于返回负数。这个方法在python3中不适用,python3中使用以下魔术方法来做比较。

__eq__:等于

__ne__:不等于

__lt__:小于

__gt__:大于

__le__:小于或等于

__ge__:大于或等于

通过实现以上方法,对象也能做比较运算,如下所示:

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):
        return True if self.age == other.age else False

    def __ne__(self, other):
        return True if self.age != other.age else False

    def __lt__(self, other):
        if self.age < other.age:
            return True
        else:
            if self.age == other.age:
                return True if self.name < other.name else False
            else:
                return True

    def __gt__(self, other):
        if self.age > other.age:
            return True
        else:
            if self.age == other.age:
                return True if self.name > other.name else False
            else:
                return False

    def __le__(self, other):
        if self.__lt__(other) or self.__eq__(other):
            return True
        else:
            return False

    def __ge__(self, other):
        if self.__gt__(other) or self.__eq__(other):
            return True
        else:
            return False


per1 = Person('peter', 18)
per2 = Person('jack', 18)
if per1 != per2:
    print("not equal")
else:
    print("equal")

if per1 < per2:
    print("per1 < per2")
else:
    print("per1 >= per2")

if per1 > per2:
    print("per1 > per2")
else:
    print("per1 <= per2")
    
输出:
equal
per1 >= per2
per1 > per2

赋值运算符

通过赋值运算魔术方法,对象也能实现自增自减操作

class Coordinate(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __iadd__(self, other):
        x = self.x + other
        y = self.y + other
        return Coordinate(x, y)

    def __isub__(self, other):
        x = self.x - other
        y = self.y - other
        return Coordinate(x, y)

    def __imul__(self, other):
        x = self.x * other
        y = self.y * other
        return Coordinate(x, y)

    def __imod__(self, other):
        x = self.x % other
        y = self.y % other
        return Coordinate(x, y)

    def __itruediv__(self, other):
        x = self.x / other
        y = self.y / other
        return Coordinate(x, y)

    def __str__(self):
        return "(%s, %s)" % (self.x, self.y)


c1 = Coordinate(2, 3)
c1 += 1
print(c1)
c1 -= 2
print(c1)
c1 *= 3
print(c1)
c1 %= 2
print(c1)
c1 /= 2
print(c1)
输出:
(3, 4)
(1, 2)
(3, 6)
(1, 0)
(0.5, 0.0)

赋值运算符相关的魔术方法使用还是比较少见的,但是比较运算符相关的魔术方法会经常用到,需要重点掌握下。这一节比较简单,没什么好说的,就酱!




本人是做大数据开发的,在微信上开了个个人号,会经常在上面分享一些学习心得,原创文章都会首发到公众号上,感兴趣的盆友可以关注下哦!
Python自学成才之路 魔术方法之比较运算符,赋值运算符_第1张图片
备注:微信公众号搜索‘大数据入坑指南

你可能感兴趣的:(python)