13.算法运行的实现(魔术方法4)

  • 思考问题:Python中不仅数值之间能进行相加,字符串、列表、元组之间也能进行相加,这是如何实现的?
    答:同类型对象之间使用+号时,实际上是触发了add魔术方法(字典没实现)

  • 算数运算相关的魔术方法
    1.__add__:加法(最常用的是这个,其它的很少去自定义)
    2.__sub__:减法
    3.__mul__:乘法
    4.__truediv__:真除法
    5.__floordiv__:整数除法
    6.__mod__:取余算法

  • __add__的重写例子(常用)

class MyStr(object):

    def __init__(self, value):
        """接收参数"""
        self.value = value

    def __str__(self):
        """print时返回值"""
        return self.value

    def __add__(self, other):
        """加法第一个值被self接收,加法第二个值被other接收"""
        # F是format拼接的意思,相当于:"{}{}".format(self.value, other.value)
        return F'{self.value}{other.value}'  # 3.6的新语法


v1 = MyStr('a')
v2 = MyStr('b')

print(v1 + v2)

print(type(v1))  # 
print(type(v1 + v2))  # 


# 所以,为了实现连续相加,MyStr的__add__方法的返回值,必须是MyStr对象
class MyStr1(object):

    def __init__(self, value):
        """接收参数"""
        self.value = value

    def __str__(self):
        """print时返回值"""
        return self.value

    def __add__(self, other):
        return MyStr(F'{self.value}{other.value}')  # 为了实现连续相加


v1 = MyStr1('a')
v2 = MyStr1('b')
v3 = MyStr1('c')

print(v1 + v2 + v3)  # abc

你可能感兴趣的:(13.算法运行的实现(魔术方法4))