鱼C论坛

 找回密码
 立即注册
查看: 2797|回复: 3

一个魔法方法简单问题,一直不能够理解

[复制链接]
发表于 2016-9-2 22:31:20 | 显示全部楼层 |阅读模式

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

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

x
如下代码
  1. class Rectangle:
  2.     def __init__(self,width = 0,height = 0)
  3.         self.width = width
  4.         self.height = height
复制代码


问题:
代码能不能简化成 (如下新代码1)
  1. class Rectangle:
  2.     def __init__(self):
  3.         self.width = 0
  4.         self.height = 0
复制代码

为什么非得在__init__初始化时加上width = 0,height = 0,然后下面再调用


又或者代码甚至能不能简化成 (如下新代码2)
  1. class Rectangle:
  2.     def __init__(self,width = 0,height = 0):
复制代码

这样岂不是直接在括号内赋值了,更简单了


如果两者方法都是错的,大神能解释下原因吗,为什么非得在__init__里赋值,然后下面语句里调用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-2 22:54:06 | 显示全部楼层
第一个问题:
例子中的width和height是可以在实例化时赋值的,当然如果不赋值缺省为0,如果按你的修改就只能为0了。
第二个问题:
__init__时虽然有参数但没有在函数中使用,也就无法调用width和height了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 08:00:53 | 显示全部楼层
3种形式,你自己比较一下,哪个好?
  1. >>> class 矩形:
  2.     def __init__(self,宽 = 0,高 = 0):
  3.         self.宽 = 宽
  4.         self.高 = 高

  5.         
  6. >>> 正方形 = 矩形(5, 5)
  7. >>> 正方形.宽
  8. 5
  9. >>> class 矩形2:
  10.     def __init__(self):
  11.         self.宽 = 0
  12.         self.高 = 0

  13.         
  14. >>> 正方形 = 矩形2()
  15. >>> 正方形.宽 = 5
  16. >>> 正方形.高 = 5
  17. >>> 正方形.宽
  18. 5
  19. >>> class 矩形3:
  20.     def __init__(self,宽 = 0,高 = 0):
  21.             pass

  22.        
  23. >>> 正方形 = 矩形3(5, 5)
  24. >>> 正方形.宽
  25. Traceback (most recent call last):
  26.   File "<pyshell#28>", line 1, in <module>
  27.     正方形.宽
  28. AttributeError: '矩形3' object has no attribute '宽'
  29. >>> 正方形.宽 = 5
  30. >>> 正方形.高 = 5
  31. >>> 正方形.宽
  32. 5
  33. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-3 14:03:09 | 显示全部楼层
SixPy 发表于 2016-9-3 08:00
3种形式,你自己比较一下,哪个好?

大概懂了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 13:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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