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

定义函数时候传入(self, score) 和(self)有什么区别

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

#注释内容是我的代码

   ''' @grade.setter

    def grade(self, score):

        if score > = 80:

            self.__grade ='A'

        elif score < 60:

            self.__grade = 'C'

        else self.__grade = 'B''''

    #下面是老师答案

     @property

    def grade(self):

        if self.score < 60:

            return 'C'

        if self.score < 80:

            return 'B'

        return 'A'


s = Student('Bob', 59)

print s.grade


s.score = 60

print s.grade


s.score = 99

print s.grade

问一下,定义函数时候传入(self, score) 和(self)有什么区别?以及后面使用 self.__grade ='A'和直接return会有什么不一样?

正在回答

3 回答

请问没有定义__grade属性,如何设置self.__grade ='A'

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

传入self是为了将score属性值绑定到这个实例上,就是实例化,score就是形参啦

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

定义函数时候传入(self, score) 和(self)这两个不同的参数代表了不同的意义,首先self的含义是指向调用该方法的实例本身,是一个固定的参数,这个参数的后面跟着的参数如:score,代表你要传入的真正参数。

self.__grade ='A'和直接return会有什么不一样:

前者是对于属性设置值,后者没有对属性设置值,而是返回一个用户可以看到的值

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

Dai9210 提问者

我用这两种执行出来的结果是一样的,能不能麻烦详细解释一下?比如老师习题上 @property def score(self): 。。。。 @score.setter def score(self, score): 。。。。 这里第一个传入的就是self实例,第二个还加了score参数,为什么要这样设置? 麻烦了,谢谢
2016-12-02 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

定义函数时候传入(self, score) 和(self)有什么区别

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