python同类中函数装饰器

同一个类中要做装饰器的时候,也需要函数里面的wrapper函数带上不定长参数,使用了私有属性,方便装饰器的使用,所以的话,总结就是要不断地试错,先不要着急问他人,自己想办法解决,我认为这样才能够成长,思维才能够提升。
出错地方就是wrapper未带参数,以及Average函数里面不该有self,
很明显,self 存的就是调用该实例方法的实例对象的引用
所以!谁调用实例方法,self 就是谁!

应用场景:
创建一个Students类,打印出学生总分、平均分、学生信息,由于平均分会由总分除以科目数,所以,可以应用到装饰器来求平均分。

正确的解答如下:
class Students():
    def __init__(self, name, num, sex, e_score, m_score, c_score):
        self.name = name
        self.num = num
        self.sex = sex
        self.e_score = e_score
        self.m_score = m_score
        self.c_score = c_score

    def Average(fun_name):
        def wrapper(*args, **kwargs):
            print("平均分为:{}".format(fun_name(*args, **kwargs)/3))
        return wrapper


    @Average
    def AllScore(self):
        s = self.e_score + self.m_score + self.c_score
        print("总分为{}".format(s))
        return s


    def message(self):
        print("学生姓名为:{},年龄为:{},性别为:{},英语成绩为:{},数学成绩为:{},语文成绩为:{}".format(self.name, self.num, self.sex, self.e_score, self.m_score, self.c_score))

if __name__ == "__main__":
    s = Students("wiwiyixiao", "21", "女", 80, 90, 100)
    s.AllScore()
    # s.Average()
    s.message()

打印结果:

总分为270
平均分为:90.0
学生姓名为:wiwiyixiao,年龄为:21,性别为:女,英语成绩为:80,数学成绩为:90,语文成绩为:100

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值