魔法函数

什么是魔法函数

在python里面,以双下划线开头并结尾的函数,叫做魔法函数。

魔法函数可以随意定义某个类的特性,这些方法在进行特定的操作时会自动被调用。

python数据模型对python的影响

python数据模型就是魔法函数,魔法函数不用我们显式的去调用,我们声明了魔法函数意味着这个对象就有特别的功能,我们是不需要像XXX.goxx()这个样取调用我们的魔法方法的。

python魔法函数一览

__str____repr__的区别

__repr____str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员。

__str__是在字符串格式化的时候调用,比如print(obj)会调用对象内部的__str__方法

__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,在交互模式下直接输入对象名,会出现对象相关的描述信息

class Company(object):
    def __init__(self,employee_list):
        self.emplpyee = employee_list

    def __str__(self):
        return ",".join(self.emplpyee)

    def __repr__(self):
        return ",".join(self.emplpyee)

company = Company(["tom", "bob", "jane"])

company
# print(company) #tom,bob,jane

魔法函数可以写在任意一个类中,数值运算的魔法函数一般用于对数据的处理,下面的例子,是一个向量相加的处理。

class MyVector(object):

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

    def __add__(self, other):
        re_object = MyVector(self.x + other.x, self.y+other.y)
        return re_object

    def __str__(self):
        return "x:{},y:{}".format(self.x,self.y)


first_vector = MyVector(1,2)
second_vector = MyVector(2,1)
print(first_vector + second_vector) #x:3,y:3

魔法函数一览

len函数的特殊性

len()函数并不简单是一个类似于__len__()的方法,len()函数内部做了很多的优化。所以,尽量的去使用Python的内部函数。