python装饰器类型错误_python:在类中定义装饰器函数时出错,该如何解决?

问 题

#学生类

class Stu:

def __init__(self,name,grade):

self.name=name #名字

self.grade=grade #分数

def printout(self):

print("name:{0} grade:{1}".format(str(self.name),str(self.grade))) #格式化输出

def plusDouble(self,plus_fun): #装饰器函数

def inner():

return str(plus_fun())+"分"

return inner

@plusDouble

def plus(self,num):

self.grade=self.grade+num

return self.grade #返回加分后的结果

#测试

student=Stu("zhangsan",20)

student.printout()

student.plus(20)

student.printout()

报错的结果:

Traceback (most recent call last):

File "E:\eclipse\eclipse\plugins\org.python.pydev_4.5.5.201603221110\pysrc\pydevd.py", line 1529, in

globals = debugger.run(setup['file'], None, None, is_module)

File "E:\eclipse\eclipse\plugins\org.python.pydev_4.5.5.201603221110\pysrc\pydevd.py", line 936, in run

pydev_imports.execfile(file, globals, locals) # execute the script

File "E:\eclipse\eclipse\plugins\org.python.pydev_4.5.5.201603221110\pysrc\_pydev_imps\_pydev_execfile.py", line 18, in execfile

exec(compile(contents+"\n", file, 'exec'), glob, loc)

File "E:\workplace\PlayPy\Play.py", line 14, in

class Stu:

File "E:\workplace\PlayPy\Play.py", line 27, in Stu

@plusDouble

TypeError: plusDouble() missing 1 required positional argument: 'plus_fun'

TypeError: plusDouble() missing 1 required positional argument: 'plus_fun'

这该怎么办?

解决方案

# coding: utf-8

def plusDouble(plus_fun): #装饰器函数

def inner(self, num):

return str(plus_fun(self, num))+"分"

return inner

class Stu:

def __init__(self,name,grade):

self.name=name #名字

self.grade=grade #分数

def printout(self):

print("name:{0} grade:{1}".format(str(self.name),str(self.grade))) #格式化输出

@plusDouble

def plus(self,num):

self.grade=self.grade+num

return self.grade #返回加分后的结果

#测试

student=Stu("zhangsan",20)

student.printout()

student.plus(20)

student.printout()

wx.jpg

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值