发布时间:2022-10-01 11:30
魔术方法,指python中所有以”__”(双下划线)作为名字开头和结尾的方法。它们也被称为“dunders”。我们最常用到的应该就是“init”
方法 | 描述 |
---|---|
–del– | 析构函数,释放对象时使用 |
–repr– | 打印转换 |
–setitem– | 按照索引赋值 |
–getitem– | 按照索引取值 |
–len– | 获取长度 |
–cmp– | 比较运算 |
–call– | 函数调用 |
–add– | 加运算 |
–sub– | 减运算 |
–mul– | 乘运算 |
–truediv– | 除运算 |
–mod– | 求余运算 |
–pow– | 指数运算 |
–and– | 按位与运算 |
–xor– | 按位异或运算 |
–or– | 按位或运算 |
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)
实现了类与类之间的运算.。需要注意的是,两个类要同类型。
构造自定义容器,在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
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
程序执行完毕