python 类的内置方法二

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> 20
del 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 = 20
print(a.x) # 20
print(a.num) # 20
del 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
数学-->100
python-->100
1.Iterable判断对象是否可迭代对象
from collections import Iterable
a = {"语文":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 333
f = fun()
for item in f:
    print('item的值为%d' % item)
-----------
one print
item的值为111 
two print
item的值为222
three print
item的值为333
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值