为何此处用Point.string(self)格式化输出为空

为何此处用Point.string(self)格式化输出为空

class  Point(object):
    # 自定义Point类的构造(初始化)方法
    def __init__(self, x, y):
        self.x = x
        self.y = y
    # 自定义Point类对象的格式化输出函数(string())
    def string(self):
        print('{{{0}:{1},{2}:{3}}}'.format('X',self.x,'Y',self.y))
class  Circle(Point):
    # 自定义Circle类的构造(初始化)方法
    def __init__(self, x, y, radius):
        Point.__init__(self,x, y)
        self.radius = radius
    # 自定义Circle类对象的格式化输出函数(string())
    def string(self):
        print('该图形初始化点为:{{{0}:{1},{2}:{3}}};半径为{4}'.format('X',self.x,'Y',self.y, self.radius))
class Size(object):
    # 自定义Size类的构造(初始化)方法
    def __init__(self, width, height):
        self.width = width
        self.height = height
    # 自定义Size类对象的格式化输出函数(string())
    def string(self):
        print('{{{0}:{1},{2}:{3}}}'.format('Width',self.width,'Height',self.height))
class Rectangle(Point, Size):
    
    # 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化
    def __init__(self,x,y,width,height):
        Point.__init__(self,x,y)
        Size.__init__(self,width,height)
    # 自定义Rectangle类对象的格式化输出函数(string())
    def string(self):
        print('该图形初始化点为:{0};长宽分别为:{1}'.format(Point.string(self), Size.string(self)))
if __name__ == "__main__":
    # 实例化Circle对象,圆心为(5,5),半径为8
    c = Circle(5,5,8)
    c.string()
    # 实例化Rectangle对象,顶点位置(15,15),长和宽分别为15和15
    r1 = Rectangle(15,15,15,15)
    r1.string()
    # 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14
    r2 = Rectangle(40,30,11,14)
    r2.string()

运行结果如下:

http://img1.sycdn.imooc.com//climg/5dd266e90981d81a03360150.jpg

值都有正常传入,但在format输出时则为None

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手乔木 2019-11-18 18:44:46

同学你好:

同学调用父类函数,由于没有设置函数的返回值,因此函数的返回值默认为None。(函数的值由函数返回值来体现)

因此同学需要设置返回值,使用return关键字。

http://img1.sycdn.imooc.com//climg/5dd275ce097c5a6508600276.jpg

http://img1.sycdn.imooc.com//climg/5dd275de091602ae07010302.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 岸石立蝶 #1
    问题是如果我不做格式化输出,直接Point.string()在控制台是有输出值的,此外我测试过return,结果是可以输出,但问题是会把父类的string多次输出,和目标要求并不一致。
    2019-11-18 20:43:28
  • 好帮手乔木 回复 提问者 岸石立蝶 #2
    同学你好:1 函数的值需要使用return关键字来设置的,print方法的作用只是单纯的将值输出在控制台。所以同学没有设置返回值前,默认是None,因此同学在控制台输出的函数的值为None。2 直接调用Point.string()方法,该函数中有print输出语句因此会在控制台输出,但是函数的值为None。3 当print(Point.string())时,即调用该方法会执行函数中的print语句,又输出该函数的值。因此会和练习要求的输出结果不同。解决办法:按照同学的方法,在父类中的string方法不使用print语句即可。但要设置return返回值,上一条回答中将print语句注释掉。另外建议同学重新学习函数返回值这部分的内容。判断print和return之间的区别。链接:https://class.imooc.com/lesson/918#mid=22921。学习愉快^_^。
    2019-11-19 10:32:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师