为了账号安全,请及时绑定邮箱和手机立即绑定

装饰器问题

class Student(object):


    def __init__(self, name, score):

        self.name = name

        self.__score = score


    @property

    def score(self):

        return self.__score


    @score.setter

    def score(self, score):

        if score < 0 or score > 100:

            raise ValueError('invalid score')

        self.__score = score

    #@property

    def grade(self):

        if self.__score>=80:

            return 'A'

        elif self.__score>=60:

            return 'B'

        elif self.__score<60:

            return 'C'


s = Student('Bob', 59)

print s.grade


s.score = 60

print s.grade


s.score = 99

print s.grade


为什么函数grade上面不加装饰器结果是">"啊

正在回答

8 回答

而@property是python内置的一个装饰器,作用是将一个方法变成属性,当调用属性时就可以不用带参数,即直接使用 s.grade 。

1 回复 有任何疑惑可以回复我~

其实结果不是 “>”,在电脑编辑器运出来长这样:

https://img1.sycdn.imooc.com//5c4addcf0001cdd406390052.jpg

返回的是函数的地址,所以说上面你定义的grade(),是类的一个方法,也就是一个函数,函数调用时要加上参数,即:

print s.grade()

这个其实是 4-8 python中定义实例方法 的知识内容。


1 回复 有任何疑惑可以回复我~

#@property  去掉这个#

0 回复 有任何疑惑可以回复我~

他没有self.__score这个参数,所以,会出错   而property装饰器是用来获得·score的

0 回复 有任何疑惑可以回复我~

你没仔细看grade函数的参数吧   :     grade  函数的参数

0 回复 有任何疑惑可以回复我~

同问!

1 回复 有任何疑惑可以回复我~

确实不知道为什么会是一个>,同问!

1 回复 有任何疑惑可以回复我~

你试一试s.grade()

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

装饰器问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信