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

用了@property以后 为什么原来的方法不能用了

class Student(object):


    def __init__(self, name, score):

        self.name = name

        self.__score = score

    def get_score(self):

        return self.__score    

    @property

    def grade(self):

        if self.score < 60:

            return 'C'

        if self.score < 80:

            return 'B'

        return 'A'        

    

    @property

    def score(self):

        return self.__score


    @score.setter

    def score(self, score):

        if not isinstance(score,int):

            raise ValueError('score must be int')

        if score < 0 or score > 100:

            raise ValueError('invalid score')

        self.__score = score

    


    


s = Student('Bob', 59)

print s.grade

print s.score


print s.get_score


s.score = 60

print s.grade


s.score = 99

print s.grade


原来的s.get_score 为什么不能正常使用了?


正在回答

3 回答

为什么要用property装饰器?    property装饰器里的内容都有些什么?

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

首先要清楚,你的get_score 是一个实例方法, 所以调用实例方法应该 s.get_score() 

如果楼主想 s.get_score  调用方法的话, 可以用property 装饰器,进行装饰,就可以用了.

@property
def get_score(self):

    return self.__score

这也是 ,属性和方法的区别, 属性 直接 s.score   调用,  而方法需要 s.get_score() 来进行调用哦, 

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

s.get_score(),这个是方法,后面需要加“()”才能调用方法

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

举报

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

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

进入课程

用了@property以后 为什么原来的方法不能用了

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号