W1ND123 发表于 2021-10-31 10:18:06

关于11.3.2:__init__的一点疑问

情景一:
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 10:25:07

__init__ 是用于初始化,并且定义类里面的元素。
你的 power 是类里面的元素,不是函数,也不是类,为什么要括号?

jackz007 发表于 2021-10-31 12:12:44

      【情景1】
       a . power   # 代表引用的是对象 a 的属性,也就是一个数值(100)
       a . power() # 代表调用对象 a 的方法,也就是函数,可是,你并没有为这个对象所属的类定义这个方法。
       【情景2】:
       a . power   # 这样才能引用到对象 a 的 power 属性值 100

W1ND123 发表于 2021-10-31 14:32:18

jackz007 发表于 2021-10-31 12:12
【情景1】

       【情景2】:

情景二的情况调用a.power在IDLE中会报错,是哪里出错了呢

W1ND123 发表于 2021-10-31 14:33:03

傻眼貓咪 发表于 2021-10-31 10:25
__init__ 是用于初始化,并且定义类里面的元素。
你的 power 是类里面的元素,不是函数,也不是类,为什么 ...

小甲鱼对于__init__讲的好像不是很 细,我不太清楚__init__究竟是干嘛用的

傻眼貓咪 发表于 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__() 作用

jackz007 发表于 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

W1ND123 发表于 2021-10-31 15:53:35

综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神

W1ND123 发表于 2021-10-31 15:55:09

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

综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神

jackz007 发表于 2021-10-31 16:08:38

W1ND123 发表于 2021-10-31 15:55
综合上面两位大神的指导,对__init__方法有了新的理解!感谢两位大神

         如果问题已经解决,你应该选择 "最佳答案"。
页: [1]
查看完整版本: 关于11.3.2:__init__的一点疑问