Python的魔法函数
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
company = Company(["tom", "bob", "jane"])
employee = company.employee
for em in employee:
print(em)
上述代码等于下面:
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __getitem__(self, item):
return self.employee[item]
company = Company(["tom", "bob", "jane"])
for em in company:
print(em)
- python中以双下划线开始和结束的函数(不可自己定义)为魔法函数
- 调用类实例化的对象的方法时自动调用魔法函数
- 不加__getitem__ ,Company是不可迭代类型
- 加了__getitem__ ,Company变为可迭代类型
两个小例子:
例1
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __getitem__(self, item):
return self.employee[item]
company = Company(["tom", "bob", "jane"])
print(len(company))
上面报错
正确应该是:
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __len__(self):
return len(self.employee)
company = Company(["tom", "bob", "jane"])
print(len(company))
例2:
class MyVector(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other_instance):
re_vector = MyVector(self.x+other_instance.x, self.y+other_instance.y)
return re_vector
def __str__(self):
return"x:{x}, y:{y}".format(x=self.x, y=self.y)
first_vec = MyVector(1,2)
second_vec = MyVector(2,3)
print(first_vec+second_vec)