鱼C论坛

 找回密码
 立即注册
查看: 1547|回复: 9

[已解决]关于11.3.2:__init__的一点疑问

[复制链接]
发表于 2021-10-31 10:18:06 | 显示全部楼层 |阅读模式

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

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

x
情景一:
class Turtle:
        def __init__(self):
                self.power = 100
这时候去IDLE中执行:
a = Turtle()
a.power
会输出100,但是a.power()却报错
想问一下__init__究竟是怎么用的

情景二:
class Turtle:
        def energy(self):
                self.power = 100
这时候去IDLE中执行:
a=Turtle()
a.energy()此时却什么都不会输出
想问一下为什么不会输出100呢
最佳答案
2021-10-31 15:00:42
本帖最后由 jackz007 于 2021-10-31 15:05 编辑
W1ND123 发表于 2021-10-31 14:32
情景二的情况调用a.power在IDLE中会报错,是哪里出错了呢


【情景1】:Turtle 类带有 __init__() 方法,所以,在定义对象 a 的时候,a . power 会自动被初始化为 100
>>> class Turtle:
    def __init__(self):
        self.power = 100

        
>>> a = Turtle()
>>> a . power
100
【情景2】:Turtle 类没有带 __init__() 方法,所以,在定义对象 a 的时候,power 属性还不存在,所以,必须要执行一次 a . energy() ,属性 power 才会被添加进来,这个时候,才可以访问 a . power 属性。
>>> class Turtle:
    def energy(self):
        self . power = 100

        
>>> a = Turtle()
>>> a . energy()
>>> a . power
100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 10:25:07 | 显示全部楼层
__init__ 是用于初始化,并且定义类里面的元素。
你的 power 是类里面的元素,不是函数,也不是类,为什么要括号?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 12:12:44 | 显示全部楼层
        【情景1】
       a . power   # 代表引用的是对象 a 的属性,也就是一个数值(100)
       a . power() # 代表调用对象 a 的方法,也就是函数,可是,你并没有为这个对象所属的类定义这个方法。 
       【情景2】:
       a . power   # 这样才能引用到对象 a 的 power 属性值 100 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:32:18 | 显示全部楼层
jackz007 发表于 2021-10-31 12:12
【情景1】

       【情景2】:

情景二的情况调用a.power在IDLE中会报错,是哪里出错了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:33:03 | 显示全部楼层
傻眼貓咪 发表于 2021-10-31 10:25
__init__ 是用于初始化,并且定义类里面的元素。
你的 power 是类里面的元素,不是函数,也不是类,为什么 ...

小甲鱼对于__init__讲的好像不是很 细,我不太清楚__init__究竟是干嘛用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 14:55:24 | 显示全部楼层
W1ND123 发表于 2021-10-31 14:33
小甲鱼对于__init__讲的好像不是很 细,我不太清楚__init__究竟是干嘛用的

如我所说,初始化类里面的元素,比如:
class 学生:
    def __init__(self):
        self.身高 = 175
        self.体重 = 70
        self.数学成绩 = 87
以上用中文写代码纯属范例,只是要让你明白 __init__() 作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 15:00:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-10-31 15:05 编辑
W1ND123 发表于 2021-10-31 14:32
情景二的情况调用a.power在IDLE中会报错,是哪里出错了呢


【情景1】:Turtle 类带有 __init__() 方法,所以,在定义对象 a 的时候,a . power 会自动被初始化为 100
>>> class Turtle:
    def __init__(self):
        self.power = 100

        
>>> a = Turtle()
>>> a . power
100
【情景2】:Turtle 类没有带 __init__() 方法,所以,在定义对象 a 的时候,power 属性还不存在,所以,必须要执行一次 a . energy() ,属性 power 才会被添加进来,这个时候,才可以访问 a . power 属性。
>>> class Turtle:
    def energy(self):
        self . power = 100

        
>>> a = Turtle()
>>> a . energy()
>>> a . power
100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 15:53:35 | 显示全部楼层
综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 15:55:09 | 显示全部楼层
jackz007 发表于 2021-10-31 15:00
【情景1】:Turtle 类带有 __init__() 方法,所以,在定义对象 a 的时候,a . power 会自动被初始化为  ...

综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 16:08:38 | 显示全部楼层
W1ND123 发表于 2021-10-31 15:55
综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神

         如果问题已经解决,你应该选择 "最佳答案"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 21:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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