鱼C论坛

 找回密码
 立即注册
查看: 2560|回复: 6

[已解决]我对__init__方法的理解

[复制链接]
发表于 2017-2-3 15:44:04 | 显示全部楼层 |阅读模式

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

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

x
学到38讲,把我对__init__的一点理解写出来,请前辈们指教。

我觉得用了__init__方法以后就没必要设置类的属性了,比如:
class Turtle():
        age = 10
        weigth = 20
        color = 'green'
        def pa(self):
                print('我在努力的爬……')

而有了__init__之后,年龄、体重、颜色这些属性就可以搬到__init__中去了,代码就变成这样:
class Turtle():
        def __init__(self,age=10,weigth=20,color='green'):
                self.age = age
                self.weigth = weigth
                self.color = color
        def pa(self):
                print('我在努力的爬……')

__init__就是为了初始化属性而存在的,所以用了__init__以后就不需要再来单独定义属性了。
最佳答案
2017-4-14 14:02:12
正如你说的,属性分为类属性和实例化属性。同名的话实例化属性将覆盖掉类属性,用del删除掉实例化属性又可以看到类属性了。
__init__不仅是为了初始化属性而存在的。它实际上是实例化时会自动运行的函数(方法),这里面可以赋值(定义属性),也可以做其他操作。当然也可以在其他函数中进行赋值操作,只是它需要运行后才起作用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-3 15:47:44 | 显示全部楼层
有道理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-4 14:23:43 | 显示全部楼层
你真棒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-7 15:01:41 | 显示全部楼层
看了魔法方法之后又有点新认识。
写法1,其实是类属性,属于静态变量,仅用于跟踪类的相关值
方法2写到init中的是实例属性。是实例化后对象自身的属性。
--------以上是老师说的,以下是自己悟的--------
而且用了init可以在实例化的时候方便的设置对象的属性,否则写法1还要弄个set属性的方法,也太麻烦了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 11:46:37 | 显示全部楼层
感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 14:02:12 | 显示全部楼层    本楼为最佳答案   
正如你说的,属性分为类属性和实例化属性。同名的话实例化属性将覆盖掉类属性,用del删除掉实例化属性又可以看到类属性了。
__init__不仅是为了初始化属性而存在的。它实际上是实例化时会自动运行的函数(方法),这里面可以赋值(定义属性),也可以做其他操作。当然也可以在其他函数中进行赋值操作,只是它需要运行后才起作用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 10:26:45 | 显示全部楼层
额,这不就是和 Java 中的构造器类似吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-25 05:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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