#学生类 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, inglobals = 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'
这该怎么办?
#学生类
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(plus_fun): #装饰器函数
def inner(self,num):
return str(plus_fun(self, num))+"分"
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()
报错很清楚啊… plusDouble少一个参数。作为一个类方法的plusDouble是有两个参数的… 它作为装饰器的时候你只传了一个参数进去,plus = plusDouble(plus)
当然是少一个参数了。
# 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()