关于topleft的实现顺序

关于topleft的实现顺序

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

老师您好,如图所示代码,topleft指令在self.rect的下一行,相当于先执行self.rect,再执行下一行的topleft

但是下面在绘制的时候,为什么采用的是self.rect的位置呢,这个时候不是还没有运行到topleft对位置进行修正么

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

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

1回答
好帮手慕觉浅 2020-05-14 17:28:51

同学你好:这里的self.rect = self.image.get_rect()和self.rect.topleft = init_pos这两行代码是在Block类中的__init__()函数里的,而__init__()函数是类的初始化函数,即会在类实例化对象时做初始化调用。因此在下面实例化精灵对象sprite_1 = Block(pygame.Color(255, 0, 0), 50, 50, (50, 50))和sprite_2 = Block(pygame.Color(0, 255, 0), 50, 50, (90, 90))时就已经为两个实例对象分别执行过self.rect = self.image.get_rect()和self.rect.topleft = init_pos这两行代码了。下面绘制时也就可以直接使用sprite_1.rect和sprite_2.rect,已经赋值为指定值。

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

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 老师,也就是说在构造函数init里,函数的顺序并没有特别大的影响,因为在实例化的瞬间所有命令都已经被执行了,是这样子么
    2020-05-14 17:33:30
  • 同学你好:不是的。__init__()中的执行顺序也是从上到下。实例化对象时会将__init__()中的代码从上到下全部执行完,所以之后往屏幕上绘制精灵时self.rect.topleft = init_pos这行在实例化对象时就已经执行过了,可以直接使用实例对象.rect,此时就是设置好的位置了。
    2020-05-14 17:54:13
  • 相当于init后,返回的是构造函数最后一步的结果么
    2020-05-14 19:26:52
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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