在python的类中,制作一个装饰器的函数,

class A:
def wrapper(func): ###装饰器
def wrapped(self,*arg,**kwargs)
...
return wrapped @ wrapper ###装饰mix
def mix():
...

当调用mix的时候,self.mix() ,会将self等参数传入 wrapper 中来吗?答案为否。

当wrapper作为装饰器的并且@wrapper这种方式作为装饰的时候,wrapper就跟普通的函数一样,仅仅接收被装饰的函数作为参数,并不会对装饰器传入额外的任何self,cls等参数,而类就相当于一个命名空间而已。

wrapper本身用@staticmethod,与@classmethod装饰,会得出错误。

'staticmethod' object is not callable

'classmethod' object is not callable

因为装饰器必须是能够被调用的对象,而wrapper被@staticmethod,与@classmethod装饰过后,就不是一个可被调用的对象了。

后面测试:父类被装饰器装饰过的某个函数例如A,在子类中可以继承该A函数并进行重写(无需加装饰器),采用super没有问题。

python 类中的某个函数作为装饰器的更多相关文章

  1. python函数式编程之匿名函数、装饰器、偏函数

    匿名函数 当我们在传入函数时,有些时候,不需要显式的定义函数,直接传入匿名函数就行.如下面 lambda x: x*x 在python中,关键字lambda表示匿名函数,冒号前面的x表示函数参数 匿名 ...

  2. 学习python第十三天,函数5 装饰器decorator

    定义:装饰器本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则:1.不能修改被装饰的函数的源代码 2.不能修改装饰的函数的调用方式 实现装饰器知识储备1函数即变量2.高阶函数,满足2个条件之一 ...

  3. 通过decorators = [,] 的形式给类中的所有方法添加装饰器

    给类添加装饰器有多种方法: 1.可以在类中的某个方法上边直接@添加,这个粒度细.无需详细介绍 2.也可以在类中通过 decorators=[, ]的形式添加,这样的话,类中的所有方法都会被一次性加上装 ...

  4. Python开发基础-Day7-闭包函数和装饰器基础

    补充:全局变量声明及局部变量引用 python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 global关键字用来在函数或其 ...

  5. python之路 内置函数,装饰器

    一.内置函数 #绝对值 abs() #所有值都为真才为真 all() #只要有一个值为真就为真 any() #10进制转成二进制 bin() #10进制转成八进制 oct() #10进制转成十六进制 ...

  6. Python全栈之路----函数进阶----装饰器

    Python之路,Day4 - Python基础4 (new版) 装饰器 user_status = False #用户登录后改为True def login(func): #传入想调用的函数名 de ...

  7. python基础语法7 闭包函数与装饰器

    闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...

  8. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  9. Python类中装饰器classmethod,staticmethod,property,

    @classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __cou ...

随机推荐

  1. 获取openid回调两次

    解决了好久,请教了各路大神也没找到解决方案. 最后灵感一现,是不是参数顺序问题?按照官网示例的先后顺序从新调用了一次,回调一次,成功解决. 官网文档:https://mp.weixin.qq.com/ ...

  2. a标签href="javascript:;"

    //点击a链接,执行一段js代码 <!DOCTYPE html> <html> <head> <title></title> </he ...

  3. c# windows服务的制作

    一.创建一个Windows Service )创建Windows Service项目 )对Service重命名 将Service1重命名为你服务名称,这里我们命名为Servicetest. 二.创建服 ...

  4. 文件打包代码更新 使用json记录打包文件信息

    经过之前的几次试验 决定使用json记录打包文件信息 #include "Package.h" #include "json/json.h" #include ...

  5. 关闭Found duplicated code

    IDEA中的这个“发现重复代码 - Found duplicated code“的这个提示甚是烦躁. Settings —> Editor —> Inspections —> Gen ...

  6. 共享keychain数据

    [共享keychain数据] 当往keychain中插入数据时,默认的 kSecAttrAccessGroup 就是App自身的BundleID. [官方文档] You can add a keych ...

  7. linux计划任务(二)

    计划任务的授权 1.at任务 /etc/at.allow /etc/at.deny 2.crontab任务 /etc/cron.allow /etc/cron.deny [注:如果allow文件存在, ...

  8. 一)get started with the Quartz project

    官网 http://www.quartz-scheduler.org/ 下载链接 http://www.terracotta.org/download/reflector.jsp?b=tcdistri ...

  9. MySQL性能调优与架构设计——第1章 MySQL 基本介绍

    第1章 MySQL 基本介绍 前言:作为最为流行的开源数据库软件之一, MySQL 数据库软件已经是广为人知了. 但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍.主 ...

  10. Npoi List DataTable导出一个Excel多个sheet 下载

    参考: http://blog.csdn.net/zhouqinghe24/article/details/8649346 参考下载http://www.cnblogs.com/dyllove98/a ...