2018-07-20-Python全栈开发day28-描述符应用与类的装饰器-part4

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

在本例中,何时,为何可以使用描述符,进行分析。

猜你喜欢

转载自www.cnblogs.com/hai125698/p/9344736.html