python入门到秃顶(10):new方法、定制属性访问、描述符与装饰器

一,__new__方法

  • 四个点理解

    1,__new__方法是在类创建实例的时候自动调用
    2,实例是通过继承的基类里面的__new__方法创建出来的
    3,先调用__new__方法创建实例,再调用__init__方法初始化实例
    4,__new__方法,后面的cls代表的是类本身
    5,print(objict.__new__(cls) = print(aaa)创建实例
    

    在这里插入图片描述在这里插入图片描述

  • 单例模式

    1,先创建一个私有属性,定义为None
    2,进行第一次条件判断,
    3,用基类的new方法创建一个实例赋值给类的私有属性,返回给new
    4,以后无论在这这个类里面创建几个实例都是第一个实例!
    

    在这里插入图片描述在这里插入图片描述

二,定制属性访问

  • 1# setattr 接收实例,属性,属性值三个参数,若不存在这个属性,增加这个属性,若存在修改属性
    

在这里插入图片描述在这里插入图片描述

  • 1# delattr 接收实例,属性两个参数,删除这个实例的属性
    

在这里插入图片描述
在这里插入图片描述

  2# 实例__delattr__(属性) 底  层自动调用delattr,删除属性 

在这里插入图片描述在这里插入图片描述

  • 1# setattr 接收实例,属性,属性值三个参数,修改原来属性值为现属性值
    

    在这里插入图片描述
    在这里插入图片描述

    2# 实例.__setattr__(属性, 值)使用这个魔法方法时底层自动调用setattr这个方法
    

    在这里插入图片描述
    在这里插入图片描述

  • 1# hasattr	接收实例,属性两个参数,返回bool值
    
    2# getattr 接收实例,属性两个参数,返回实例的属性的值,找不到报错
    

    在这里插入图片描述在这里插入图片描述

    • 查看(访问)不存在的属性名时自动调用的魔法方法
      1def __getattr__(self,item):
        		print('没有这个属性')
          # 若用户访问的属性不存在时候自动调用__getattr__这个魔法方法,item是你访问的不存在的属性名
           * 若没有定义这个方法,在访问不存在的属性的时候就会报错!
      
      在这里插入图片描述
      在这里插入图片描述
    3# 实例.__getattribute__(属性) 使用这个魔法方法会自动调用getattr,找不到报错
    

    在这里插入图片描述
    在这里插入图片描述

    • 查看(访问)存在的属性名时自动调用的魔法方法

      1def __getattribute__(self,item):
      		print('你正在访问{}属性'.format(item))
      		return 		  object.__getattribute__(self,item)
          # 这个魔法方法会在用户访问不管存在或不存在的属性时都会自动调用,但访问不存在会报错
          # 由于我们不知道我们要这样返回用户访问的值,直接调用父类里面的__getattribute__魔法方法,父类会帮我们返回
      

      在这里插入图片描述
      在这里插入图片描述

三,描述符

# 如果一个对象实现了__get__,__set__,__delete__这三个魔法方法中的任意一个,那么该对象为描述符,或这个类创建的实例是描述符
class A(object):
    def __get__(self, instance, owner):
        print('get')

    def __set__(self, instance, value):
        print('set')

    def __delete__(self, instance):
        print('del')


class B(object):
    m = A()

    def __del__(self):
        print('主人,执行完了!')


s = B()
s.m         # 访问s的属性m 调用get方法
s.m = 6     # 设置s的属性m的值,调用set方法
del s.m     # 删除s的m属性时,调用delete方法

=================== RESTART: C:\Users\满怀心\Desktop\test1.py ===================
get
set
del
主人,执行完了!

四,装饰器

  • 装饰器:在不修改原函数代码的情况下给一个函数增加新功能

    @装饰器

    def 被装饰的函数():

    ​ pass在这里插入图片描述
    在这里插入图片描述

  • python自带的三个内置类装饰器在这里插入图片描述
    在这里插入图片描述

  • 类装饰器在这里插入图片描述

练习:

# time模块
>>> import time
>>> time.time()		
1547363100.7947018	# 时间戳,
					# 1970,1,1 00点到当前这个时间的时间差,单位秒

time.sleep(时间) :让时间休眠几秒钟在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值