文章目录
8.1 常见的特殊方法
8.1.1 重写__repr__方法
repr()是一个特殊的方法,它是一个自我描述的方法,通常用于告诉外界这个对象的细节信息,一般而言可以对这个方法进行重写,当打印这个方法的 对象时候,会得到其描述信息。
#__repr__()
class Apple:
def __init__(self,weight,color):
self.weight =weight
self.color = color
def __repr__(self):
return 'Apple[weight = '+str(self.weight)+',color = '+self.color+']'
a = Apple(89,'绿色')
print(a)
8.1.2 析构方法:del
与__init__相对应的,__del__方法是析构方法,用于销毁对象,在任何Python对象被系统回收的时候,都会自动调用这个函数。
# __del__
# __del__
class Item:
def __init__(self,name,price):
self.name = name
self.price = price
def __del__(self):
print('重写析构')
im = Item('pwc','23')
x= im
del im
print('-----------------')
从上面的代码中可以看到,由于x一直在被程序调用并没有被删除掉,导致无法释放对象,只能等到程序结束的时候才能够将其释放掉
8.1.3 __dir__方法
对象的__dir__()方法用于列出该对象内部的所有属性(包括方法名),该方法将返回包含所有属性名的序列
8.1.4 __dict__属性
用于查看对象内部存储的所有属性名和属性值组成的字典,通常程序直接使用该属性即可
8.2 与反射相关的属性和方法
略
8.3 与序列先关的特殊方法
8.3.1 常用序列方法
序列最重要的特征是可以包含多个元素,因此和序列有关的特殊方法有如下几个
len(self):该方法的返回值决定序列中元素的个数
getitem(self,key):获取指定索引对相应的元素,
contains(self,item):判断序列是否包含指定元素
setitem(self,key,value):该方法设置指定索引对顶的元素
delitem(self,key):该方法删除指定索引对应的元素
8.3.2 迭代器
#定义一个代表斐波那契数列的迭代器
class Fibs:
def __init__(self,len):
self.first = 0
self.sec = 1
self.__len = len
def __next__(self):
if self.__len == 0:
raise StopIteration
self.first,self.sec = self.sec,self.first+self.sec
self.__len -= 1
return self.first
def __iter__(self):
return self
fibs = Fibs(10)
print(fibs.__next__())
print(next(fibs))
for el in fibs:
print(el,end = ' ')
8.4 生成器
8.4.1 生成器介绍
生成器与迭代器的区别在于,迭代器通常是先定义一个迭代器类,然后通过创建实例来创建迭代器,而生成器则是先定义一个包含yield语句的函数,然后通过调用该函数来创建生成器,生成器是一种非常优秀的语法,会然程序变得更加优雅
#使用生成器来定义一个差值递增的数列,
def test(val,step):
print('--------------start')
cur = 0
for i in range(val):
cur += i *step
yield cur
t = test(10,2)
print('===================')
print(t.__next__())
print(t.__next__())
8.4.2 生成器方法
在生成器运行起来以后,开发者还可以为生成器提供值,通过在这种方式让生成器与外部程序动态的交换数据。为了实现交换数据,需要使用send方法来实现
- 外部程序通过send()发送数据
- 生成器使用yeild语句来接收数据