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

 手机用户2502854107 发布于 2022-10-28 12:08
#学生类
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'
这该怎么办?

3 个回答
  • #学生类
    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()
    
    2022-10-29 17:39 回答
  • 报错很清楚啊… plusDouble少一个参数。作为一个类方法的plusDouble是有两个参数的… 它作为装饰器的时候你只传了一个参数进去,plus = plusDouble(plus) 当然是少一个参数了。

    2022-10-29 17:46 回答
  • # 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()
    2022-10-29 17:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有