Python基础11.魔法方法

发布时间:2022-10-01 11:30

python3.7魔法方法

定义:

魔术方法,指python中所有以”__”(双下划线)作为名字开头和结尾的方法。它们也被称为“dunders”。我们最常用到的应该就是“init

魔术方法简介

方法 描述
–del– 析构函数,释放对象时使用
–repr– 打印转换
–setitem– 按照索引赋值
–getitem– 按照索引取值
–len– 获取长度
–cmp– 比较运算
–call– 函数调用
–add– 加运算
–sub– 减运算
–mul– 乘运算
–truediv– 除运算
–mod– 求余运算
–pow– 指数运算
–and– 按位与运算
–xor– 按位异或运算
–or– 按位或运算

实例1

class Vector:
	def __init__(self, a, b):
  		self.a = a
  		self.b = b

	def __str__(self):
  		return 'Vector (%d, %d)' % (self.a, self.b)

	def __add__(self,other):
  		return Vector(self.a + other.a, self.b + other.b)
  		
  	def __and__(self,other):
		return Vector(self.a & other.a, self.b & other.b)

v1 = Vector(2,3)
v2 = Vector(4,5)
print (v1 + v2)
print (v1 & v2)
结果:
Vector (6, 8)
Vector (0, 1)

实现了类与类之间的运算.。需要注意的是,两个类要同类型。

实例2

构造自定义容器,在Python中,常见的容器类型有: dict, tuple, list, string。
其中tuple, string是不可变容器,dict, list是可变容器。
可变容器和不可变容器的区别在于,不可变容器一旦赋值后,不可对其中的某个元素进行修改。

class Person:
	def __init__(self,persion_list):
		self.persion_list=persion_list
	def __setitem__(self,item,value):       #赋值
		self.persion_list[item]=value
	def __getitem__(self, item):          #取值
		return self.persion_list[item]
	def __len__(self):                     #长度
		return len(self.persion_list)

body=Person(["Xiuwu","Adny","Maggie"])
print(body[1])
body[1]='apple'
print(body[1])
print(len(body))
结果:
Adny
apple
3

实例3

classFunctionalList:
	def__init__(self, values=None):
    	if values is None:
        	self.values = []
    	else:
        	self.values = values

	def__len__(self):
    	return len(self.values)

	def__getitem__(self, key):
    	return self.values[key]

	def__setitem__(self, key, value):
    	self.values[key] = value

	def__delitem__(self, key):
    	del self.values[key]

	def__iter__(self):           
    	return iter(self.values)

	def__reversed__(self):
    	return FunctionalList(reversed(self.values))

	defappend(self, value):
    	self.values.append(value)
    	
	defhead(self):                     # 获取第一个元素
    	return self.values[0]
    	
	deftail(self):                  # 获取第一个元素之后的所有元素
    	return self.values[1:]
    	
	definit(self):                        # 获取最后一个元素之前的所有元素
    	return self.values[:-1]
    	
	deflast(self):            # 获取最后一个元素
    	return self.values[-1]
    	
	defdrop(self, n):                   # 获取所有元素,除了前N个
    	return self.values[n:]
    	
	deftake(self, n):             # 获取前N个元素
    	return self.values[:n]

Python3中的del方法:

  • 在对象的生命周期结束时, __del__会被调用,可以将__del__理解为"析构函数".
    __del__定义的是当一个对象进行垃圾回收时候的行为

  • 在定义的类中存在__del__方法时,当类被删除的时候,程序会自动执行__del__当中的代码(正好与__init__方法相反).

     代码1:
     class Hero:
     	def __del__(self):
     		print("英雄已阵亡")
    
     man1 = Hero()
     man2 = man1
     del man1
     del man2
     print("程序执行完毕")
     结果:
     英雄已阵亡          #两个类引用(man1,man2)都被删除,执行del代码,再执行print
     程序执行完毕
    

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号