第37讲 动动手乌龟吃鱼中__init__的理解
在这道题中,老师定义class Turtle和class Fish的时候,都是用了__init__:class Turtle:
def __init__(self):
self.power = 100
self.x = r.randint(legal_x, legal_x)
self.y = r.randint(legal_y, legal_y)
但如果不适用init方法,直接给x,y,power赋值,是不是也可以呢?我这样运行了一下,也没有报错:
class Turtle:
power = 100
x = r.randint(legal_x, legal_x)
y = r.randint(legal_y, legal_y)
那请问这个__init__具体需要在什么时候使用?
如果不需要我们通过输入赋值(这一讲甲鱼老师的例子用了Ball(self, name),这时候确实直接通过init给name赋值挺方便)的时候,使用这个方法跟我们在类中直接给参数赋值有什么区别?
感觉自己对init还是理解的不到位,望各位不吝赐教 本帖最后由 Twilight6 于 2020-5-15 13:22 编辑
__init__
差不多就是初始化的意思,还有设置参数的作用
你所有值在这里先初始化,是一个良好的编程习惯
你第二个类里面没有定义方法,属性写在类里面 方法外的话是属于类属性
你可以看下 我整理的笔记 区分下类里面的东东:
文档:类、实例、局部变量.note
链接:http://note.youdao.com/noteshare?id=d121373edf297b4601ba697ad8e220ea&sub=02ACF9322A2B4E619E7E6F44BD603893
如果帮助到你了,设个最佳吧{:9_228:}
本帖最后由 焦健鬼 于 2020-5-15 14:10 编辑
init不用的话有可能报错,但是并不一定会报错
(求最佳)@不二如是 __init__() 是初始化方法,是实例化时要做的事,你在类里边写定义的是类属性,不一样的 貌似不用魔法方法,定义不了实例化属性
你这定义的都是类属性 __init__就是初始化数据的作用,还可以设置传入的参数有哪些
你第二块那的代码没有方法,在类里面,方法外面设置的属性叫类属性(变量)
看下这边我整理的笔记吧
笔记:类、实例、局部变量
链接:http://note.youdao.com/noteshare?id=d121373edf297b4601ba697ad8e220ea&sub=02ACF9322A2B4E619E7E6F44BD603893
希望能帮助到你 焦健鬼 发表于 2020-5-15 13:18
init不用的话有可能报错,但是并不一定会报错
(求最佳)
哇,兄弟,写的这么草率就求最佳吗? 永恒的蓝色梦想 发表于 2020-5-15 13:31
哇,兄弟,写的这么草率就求最佳吗?
呵呵 永恒的蓝色梦想 发表于 2020-5-15 13:31
哇,兄弟,写的这么草率就求最佳吗?
我又卡了 永恒的蓝色梦想 发表于 2020-5-15 13:34
你现在被审核了,先不要发帖了
问题是我发啥我都看不见{:10_257:} 焦健鬼 发表于 2020-5-15 13:18
init不用的话有可能报错,但是并不一定会报错
(求最佳)
你现在因为发帖频率过高,发出去的帖子会被审核,所以先不要发帖了 永恒的蓝色梦想 发表于 2020-5-15 13:37
你现在因为发帖频率过高,发出去的帖子会被审核,所以先不要发帖了
多久才能发 焦健鬼 发表于 2020-5-15 13:18
init不用的话有可能报错,但是并不一定会报错
(求最佳)
别回了啊喂!听不懂吗? 本帖最后由 _2_ 于 2020-5-15 14:11 编辑
不用 __init__() 的话,就无法向类传递参数,主要是初始化的时候,
写 __init__() 的目的就是为了能根据传递的参数,做出不同的变化:
class A:
def __init__(self, value)
self.value = value
>>> a = A(1)
>>> a.value
1
>>> _2_ 发表于 2020-5-15 14:09
不用 __init__() 的话,就无法向类传递参数,主要是初始化的时候,
写 __init__() 的目的就是为了能根据传 ...
如果像这个题一样,不需要输入给参数赋值,为什么还要使用__init__()方法呢 Tigeroad 发表于 2020-5-15 15:37
如果像这个题一样,不需要输入给参数赋值,为什么还要使用__init__()方法呢
__init__初始化数值,定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。
如果你不设置__init__会导致你想查看实例里面的属性是会返回空的,你可以用dict来试着查看下 Twilight6 发表于 2020-5-15 15:49
__init__初始化数值,定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。
如果 ...
>>> class Ball:
name = '土豆'
def kick(self):
print(self.name)
>>> b = Ball
>>> b.name
'土豆'
请问是这样吗?这样还是可以调用呀 Tigeroad 发表于 2020-5-15 16:40
请问是这样吗?这样还是可以调用呀
这个是类变量 不是实例变量 Tigeroad 发表于 2020-5-15 16:40
请问是这样吗?这样还是可以调用呀
我这有整理的笔记推荐你看看
文档:类、实例、局部变量
链接:http://note.youdao.com/noteshare?id=d121373edf297b4601ba697ad8e220ea&sub=02ACF9322A2B4E619E7E6F44BD603893 Tigeroad 发表于 2020-5-15 16:40
请问是这样吗?这样还是可以调用呀
试试这个:
class Ball:
def kick(self):
self.name = '给个最佳'
b = Ball()
print(b.name)
然后再试试这个:
class Ball:
def __init__(self):
self.name = '给个最佳'
b = Ball()
print(b.name)
页:
[1]
2