1.什么是魔法函数
1 class Company(object): 2 def __init__(self, employee_list): 3 self.employee = employee_list 4 5 # python编译器自动调用,使得可以在for in循环中使用 6 def __getitem__(self, item): 7 return self.employee[item] 8 9 10 company = Company(["tom", "bob", "jane"]) 11 for em in company: 12 print(em) # tom bob jane
2.python的数据模型以及数据模型对python的影响
1 class Company(object): 2 def __init__(self, employee_list): 3 self.employee = employee_list 4 5 # python编译器自动调用,使得可以在for in循环中使用 6 def __getitem__(self, item): 7 return self.employee[item] 8 9 # python编译器自动调用,获得长度 10 # def __len__(self): 11 # return len(self.employee) 12 13 14 company = Company(["tom", "bob", "jane"]) 15 for em in company: 16 print(em) # tom bob jane 17 18 # __getitem__处理切片的数据可以得到len,不可以处理没有切片的数据 19 company1 = company[:2] 20 21 # 步骤: 22 # 1.查找否有__len__ 23 # 2.没有__len__再查看数据是否切片并且是否有__getitem__ 24 # 3.有则可以获得len,如果数据没有切片则会报错 25 print(len(company1)) # 2
3.魔法函数一览表
编写__str__、__repr__方法
1 class Company(object): 2 def __init__(self, employee_list): 3 self.employee = employee_list 4 5 # 在对象格式化时调用 6 def __str__(self): 7 return ",".join(self.employee) 8 9 # 在开发模式下调用 10 def __repr__(self): 11 return ",".join(self.employee) 12 13 14 company = Company(["tom", "bob", "jane"]) 15 # 对象格式化 16 print(company) # tom,bob,jane 17 # 开发模式:cmd或notebook中调用 18 company # tom,bob,jane
编写__add__方法
1 class MyVector(object): 2 def __init__(self, x, y): 3 self.x = x 4 self.y = y 5 6 def __add__(self, other): 7 re_vector = MyVector(self.x + other.x, self.y + other.y) 8 return re_vector 9 10 def __str__(self): 11 return "x:{x},y:{y}".format(x=self.x, y=self.y) 12 13 14 vec1 = MyVector(1, 2) 15 vec2 = MyVector(3, 4) 16 print(vec1 + vec2) # x:4,y:6
原文:https://www.cnblogs.com/zhihaospace/p/12073388.html