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

将答案中的if下面的return换成print,,输出的答案为什么是A None B None C None


class Person(object):

    pass     #__score为什么不写在这个位置

    def __init__(self, name, score):

        self.name=name

        self.__score=score   #为什么要写在这里

        


    def get_grade(self):

        if self.__score>=90:

            print 'A'

        elif self.__score>=60:

            print 'B'

        else:

            print 'C'


p1 = Person('Bob', 90)

p2 = Person('Alice', 65)

p3 = Person('Tim', 48)


print p1.get_grade()

print p2.get_grade()

print p3.get_grade()


正在回答

6 回答

感觉没有一个人能正面回答题主的问题啊。我觉得任务这里打错了,看答案应该是增加一个实例的属性,而不是类的属性。

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

如果直接调用p1.get_grade()就可以打印出A了

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

第一个和第二个人,已经把你的两个问题解决了。

  1. 调用函数(p1.get_grade()),,无返回值,默认返回None,print输出None

  2. score写在类下,相当于静态属性(Static),类内部函数,和类外部调用,不需要创建对象,可以通过类名.属性名,访问属性。(例:Person.score,双下划线属性除外)


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

好像记得入门课程有讲过函数有默认返回值:none,所以现在你要返回自己需要的东西就通过return得到。(js你知道么,,)

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

冷月诗魂

而且p1 = Person('Bob', 90)这里实例化带入了两个参数,像你所说的如果写在第二行,def __init__(self, name, score)这个score参数就对不齐了,会报错,但是也可以通过*args **kw解决
2017-09-13 回复 有任何疑惑可以回复我~

会打印出None是因为改成print之后get_grade(self)函数的返回值为空,而

print p1.get_grade()

print p2.get_grade()

print p3.get_grade()

语句的 意思打印出函数的返回值,所以都是None.你可以get_grade(self)函数最后加个return “abc”测试一下,会发现返回结果中None 就都变成了abc


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

score写在实例化函数外面就成为类属性,所有的实例共享,并且写在外部后是无法通过self.__score来访问的;get_grade()方法是实例方法,传入的第一个参数self代表类的实例。

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

慕用9571995 提问者

嗯嗯,谢谢你的回答。十分感谢。不过,如题所示的问题可以解答一下吗?
2017-08-17 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

将答案中的if下面的return换成print,,输出的答案为什么是A None B None C None

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