python 类的内置方法二
来源:互联网 发布:解锁姿势体验知乎 编辑:程序博客网 时间:2024/06/06 02:50
1.描述符
1.描述符就是将某种特殊类型的类的实例指派给另一个类的属性,特殊类型的类即实现下面某个或者全部的方法
- 访问属性 __get__(self,instance,owner)
返回属性的值
- 分配属性时调用 __set__(self,instance,value)
无返回值
- 删除时 __delete__(self,instance)
无返回值
class A: def __get__(self,instance,owner): print('__get__', instance, owner) def __set__(self,instance,value): print('__set__', instance, value) def __delete__(self,instance): print('__delete__', instance)class Test: x = A()t = Test()t.x # __get__ <__main__.Test object at 0x000002B03BE9A550> <class '__main__.Test'>print(t) # <__main__.Test object at 0x000002785C3FA550>print(Test) # <class '__main__.Test'>t.x = 20 # __set__ <__main__.Test object at 0x000002785C3FA550> 20del t.x # __delete__ <__main__.Test object at 0x0000024B0EC0A550>
2.描述符与property(property()函数就是描述符类)
class MyProperty: def __init__(self,fget = None,fset = None,fdel = None): self.fget = fget self.fset = fset self.fdel = fdel def __get__(self,instance,owner): return self.fget(instance) def __set__(self,instance,value): self.fset(instance,value) def __delete__(self,instance): self.fdel(instance)class A: def __init__(self): self.num = None def getNum(self): return self.num def setNum(self, value): self.num = value def delNum(self): del self.num x = MyProperty(getNum,setNum,delNum) # 与property类似a = A()a.x = 20print(a.x) # 20print(a.num) # 20del a.num
3.列表生成式
可用range(1,n)生成[1,2,3….n]的列表
>>> list(x * x for x in range(1,11))[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
4.迭代
通过for循环称为迭代
a = {"语文":90,"数学":100,"python":100}for k,v in a.items(): print("%s-->%d" %(k, v))--------------语文-->90数学-->100python-->100
1.Iterable判断对象是否可迭代对象
from collections import Iterablea = {"语文":90,"数学":100,"python":100}flag = isinstance(a,Iterable)print("对象是否可迭代:" , flag) # True
5.生成器generator
可以通过列表生成式生成列表,也可通过生成器generator一边循环一边计算的机制生成列表
a = (x * x for x in range(1,11))print(a) # a为生成器print(next(a))print(next(a))next(a)没有下一个元素会抛出StopIteration异常------------------b = (x * x for x in range(1,11))for item in b: print(item)
1.yield语句
遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
方法中出现yield则说明这个函数不是普通函数而是一个generator
yield 返回后面的值相当于return
def fun(): print('one print') yield 111 print('two print') yield 222 print('three print') yield 333f = fun()for item in f: print('item的值为%d' % item)-----------one printitem的值为111 two printitem的值为222three printitem的值为333
阅读全文