鱼C论坛

 找回密码
 立即注册
查看: 1726|回复: 5

[已解决]__init__求解

[复制链接]
发表于 2017-4-5 18:40:19 | 显示全部楼层 |阅读模式

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

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

x
求助
import random as r
class Turtle:
    def a(self):
        # 初始体力
        self.power = 100
        # 初始位置随机
        self.x = r.randint(0,10)
        self.y = r.randint(0,10)

1.png
为什么另一个会报错
import random as r
class Turtle:
    def __init__(self):
        # 初始体力
        self.power = 100
        # 初始位置随机
        self.x = r.randint(0,10)
        self.y = r.randint(0,10)
2.png
换成__init__又可以了
最佳答案
2017-4-5 20:21:22
__init__这个函数里面的变量是你创建这个类的实例就会自动附带的属性
而其他定义的函数,只有当你调用这个函数之后才会有用
所以,你第一次调用了a()这个函数,才会有power这个变量
第二次你没有调用,当然就不存在这个power了
而用__init__就不同了,当你t = Turtle()的时候就自动运行了__init__,所以power是存在的属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-5 19:20:07 | 显示全部楼层
注意如果像你说的
你在Class里进行def,最好用 def __init__(self):
甚至是必须!你在init里self.XXX是每创建一个实例化对象都可以调用里面的(像你的power)
如果你def a(self):创建实例化后只能调用一次(像你的power)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-5 19:20:22 | 显示全部楼层
因为你t = Turtle()是重新生成一个对象,你的对象中没有初始化power这些值,你的对象就没有power这些变量存在,那肯定就会报错
__init__这个方法是在你t = Turtle()创建后自动调用的,根据你的代码自动初始化power这些值,那你的对象就有了这些变量,输出就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-5 20:21:22 | 显示全部楼层    本楼为最佳答案   
__init__这个函数里面的变量是你创建这个类的实例就会自动附带的属性
而其他定义的函数,只有当你调用这个函数之后才会有用
所以,你第一次调用了a()这个函数,才会有power这个变量
第二次你没有调用,当然就不存在这个power了
而用__init__就不同了,当你t = Turtle()的时候就自动运行了__init__,所以power是存在的属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-5 20:34:27 | 显示全部楼层
gopythoner 发表于 2017-4-5 20:21
__init__这个函数里面的变量是你创建这个类的实例就会自动附带的属性
而其他定义的函数,只有当你调用这个 ...

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

使用道具 举报

发表于 2017-4-6 08:37:14 | 显示全部楼层
想要给实例变量初始化只能放在__init__里面进行初始化,否则如果放在其它地方或者直接引用的话,是会报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 06:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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