Python类之间的装饰器

首先声明,以后查资料绝对要用Google

================================================================

上次写了个模型,IAGRU继承父类的方法。有一个打印信息的东西,就是将现在模型的信息打印一下


我们想让打印的效果是这样的

blob.png

其中有一部分信息是这个小模型特有的,还有一部分是基类里面的,我们考虑用Python语法糖的方法,而不是蠢蠢的函数调用

那么我们可以这样

在父类里面有一个打印模型信息的方法,里面都是一些最基本的 模型信息

注意 因为我们是内类调用 所以必须用@classmethod装饰器 然后这个方法的第一个是cls 表示的是这个类本身,不用实例化

(还有一个是staticmethod)表示静态方法,也不用加self

装饰器必须以函数调用的形式出现


blob.png

可以看到其实那个function函数就是我们传进去的一个函数,或者说后来子类的打印信息的东西


我们看到有两个特别的参数,一个是*args,还有一个 **kwargs

他们都表示参数,第一个表示参数是一个列表,按顺序弄进去,这样就没有 N_hidden=50这样的key-value对,而第二个kwargs表示这种key-value对,是一个字典

我们可以从这个字典里面拿进来参数


然后在子类里面 可以这样


blob.png

这样就是把我们的信息打印出去了 注意我们这个里面的model_name可以不用,因为这个传到父类装饰器里面没用!!!必须在调用的时候显示的给出

如下图

blob.png

所以这就是好玩的装饰器

其实就是多了一个语法糖的作用,而且可以在子类调用的时候先用父类的东西,然后再用子类的东西,比较好

效果:

blob.png

留下您的评论

回复列表:

By王炳宁 on March 2, 2016 | 类别 Python

关于本站