1.魔法方法的使用
魔法方法是Python用来增强类的特性的方法,格式为"__ 方法名 __",下面来看看怎么使用。
这是一段没使用魔法方法代码:
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
company = Company(["tom", "bob", "jane"]) #将值传入类中
employee = company.employee #获取employee
for em in employee: #遍历打印
print(em)
输出结果
tom
bob
jane
使用魔法方法后:
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: #这里会调用__getitem__方法
print(em)
输出结果
tom
bob
jane
可以看到输出结果相同
使用魔法方法后,可以直接对列表进行切片操作。
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"])
company1 = company[:2]
for em in company1:
print(em)
输出结果
tom
bob
__ len __ 方法会调用 __ getitem __ 方法
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
# def __getitem__(self, item):
# return self.employee[item]
def __len__(self): #返回调用__getitem__
return len(self.employee)
company = Company(["tom", "bob", "jane"])
print(len(company))
输出结果
3
2.使用实例
(1)__ str __
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __str__(self): #处理返回的字符串
return ",".join(self.employee)
def __repr__(self): #在开发模式下调用
return ",".join(self.employee)
company = Company(["tom", "bob", "jane"])
print(company)
输出结果
tom,bob,jane
(2)__ abs __
class Nums(object):
def __init__(self, num):
self.num = num
def __abs__(self):
return abs(self.num)
my_num = Nums(-1)
print(abs(my_num))
输出结果
1
(3)__ add __
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(3, 5)
print(first_vec + second_vec)
输出结果
x:4, y:7