鱼C论坛

 找回密码
 立即注册
查看: 1732|回复: 4

[已解决]第45讲课后作业

[复制链接]
发表于 2016-2-4 17:03:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(不让我上传图片了=_=,题目还不让复制。。。我把大概的题目意思写一下)
问代码是否正确,错在哪里?
  1. def __setattr__(self, name, value):
  2.         self.name = value + 1
复制代码


我知道是怎么错的,答案小甲鱼给的是
  1. def __setattr__(self, name, value):
  2.         super().__setattr__ = value + 1
复制代码


可这样写程序会报错的
  1. >>> class C:
  2.         def __setattr__(self, name, value):
  3.                 super().__setattr__ = value + 1
  4.                
  5. >>> c = C()
  6. >>> c.x = 5
  7. Traceback (most recent call last):
  8.   File "<pyshell#86>", line 1, in <module>
  9.     c.x = 5
  10.   File "<pyshell#84>", line 3, in __setattr__
  11.     super().__setattr__ = value + 1
  12. AttributeError: 'super' object attribute '__setattr__' is read-only
复制代码


为什么这样写也不对?
最佳答案
2016-2-5 22:19:33
我自己的理解是,当子类不想用到父类方法时,我们可以选择重写方法来覆盖父类的方法,可是当我们需要父类方法时,又可以用super()函数来调用,可是我们只有读的权限,也就是只能调用,不能修改。甲鱼那样子应该是修改父类方法失败!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-5 00:18:18 | 显示全部楼层
  1. class C:
  2.     def __setattr__(self, name, value):
  3.         super().__setattr__(name, value+1)
  4. 这样就可以了!
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 18:22:26 | 显示全部楼层

恩恩,我跟你想的是一样的
我还想知道为什么小甲鱼那样写是不对的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-5 22:19:33 | 显示全部楼层    本楼为最佳答案   
我自己的理解是,当子类不想用到父类方法时,我们可以选择重写方法来覆盖父类的方法,可是当我们需要父类方法时,又可以用super()函数来调用,可是我们只有读的权限,也就是只能调用,不能修改。甲鱼那样子应该是修改父类方法失败!

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
shuofxz + 3 + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-5 22:29:53 | 显示全部楼层
不爱穿内裤 发表于 2016-2-5 22:19
我自己的理解是,当子类不想用到父类方法时,我们可以选择重写方法来覆盖父类的方法,可是当我们需要父类方 ...

恩恩,我觉得你说的很有道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 11:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表