1.利用描述符来实现自动以classmethod
#classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。 #大体意思就是,类可以直接使用类本身的方法,例如: class Fun: def __init__(self): pass @classmethod def show(csl): print('this is show') Fun.show()#不需要实例化直接进行输出
完成图:
class Fun: def __init__(self,func): self.func=func def __get__(self, instance, owner): def deco(*args,**kwargs):#deco可以接收很多参数 return self.func(owner,*args,**kwargs) return deco class Test: @Fun #首先这个方法肯定要被代理,然后进行定制 #show=Fun(show) def show(cls,x,y): print('this is show %s,%s' %(x,y)) Test.show(15,9)#自动传值进去,,首先这个show肯定要被代理,就是运行get方法,进行修饰
弄清楚需求,和各个参数的定义,
需求:对类的方法进行定制,正常调用方式show里面需要一个cls,但是没有实例化之前,没法这样做,那么我们就用描述符进行代理,然后在调用的时候,用get方法进行自定义,
自定义只需要理解各个参数,然后将类,这个对象传到函数的参数中,然后再返回即可。和property相似,
但是感觉还是有点迷迷糊糊的,总感觉哪里不对,但是找不出来
对,关于被代理的问题,优先级的问题
首先,类属性,数据描述符,实例属性,非数据描述符,getattr
在本例中,何时,为何可以使用描述符,进行分析。